我在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
这是我喜欢的类似的' 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的方式编写此代码?
答案 0 :(得分:1)
不确定您的某些值来自哪里,但是如果您想要捕获异常:
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')
答案 1 :(得分:1)
这是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中的一个结构。