[英]matlab to python fread with eof
我在使用python實現以下MATLAB代碼時遇到了一些麻煩。
for i = 1:N
if (feof(fid) ~= 1)
for j = 1:K
if (feof(fid) ~= 1)
tmp = fread(fid, 1, 'float');
data.(fldnames{j,1}).Samples(i) = tmp;
else
disp('Error: End of file reached');
end
end
else
disp('Error: End of file reached');
end
這是我的“ like-for-like” python嘗試,
sampleList = numpy.zeros((N, K))
for i in range(1, N) :
for j in range(1, K) :
if EOF == 0 :
try :
samples = array.array("f")
samples.fromfile(f, 1)
sampleList[i, j] = samples[0]
except :
EOF = 1
return sampleList
但是我很難抓住兩個EOF。 有沒有更簡單,更pythonic的代碼編寫方式?
不知道您的某些值來自哪里,但是如果您想捕獲異常,請執行以下操作:
for j in range(1, K) :
try :
samples = array.array("f")
samples.fromfile(f, 1)
sampleList[i, j] = samples[0]
except EOFError: # catch eof exception
print ('Error: End of file reached')
這是matlab代碼在python中所做的工作:
def read_data(filename, fieldnames, n):
data = numpy.fromfile(filename, count=n * len(fieldnames))
assert len(data) == n * len(fieldnames)
return dict((key, data[idx::len(fieldnames)]) for idx, key in enumerate(fieldnames))
我假設字段名稱的數量為K
,而fid
是文件文件filename
的文件句柄,並且n
為每個字段N
的項目數。 您得到的是帶有字段名的字典,它等同於matlab中的結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.