我是Matlab和Python的新手,我必须将Matlab中的程序转换为Python。我不确定如何在从Python中读取文件后对数据进行类型转换。使用的文件是二进制文件。
以下是Matlab代码:
fid = fopen (filename, 'r');
fseek (fid, 0, -1);
meta = zeros (n, 9, 'single');
v = zeros (n, 128, 'single');
d = 0;
for i = 1:n
meta(i,:) = fread (fid, 9, 'float');
d = fread (fid, 1, 'int');
v(i,:) = fread (fid, d, 'uint8=>single');
end
我在python中编写了以下程序:
fid = open(filename, 'r')
fid.seek(0 , 0)
meta = np.zeros((n,9),dtype = np.float32)
v = np.zeros((n,128),dtype = np.float32)
for i in range(n):
data_str = fid.read(9);
meta[1,:] = unpack('f', data_str)
对于此解压缩,我收到错误
" unpack需要一个长度为4"
的字符串参数
。 请提出建议,以使其发挥作用。
答案 0 :(得分:0)
我在问题上看了一点主要是因为我在不久的将来也需要这个。事实证明,使用numpy有一个非常简单的解决方案,假设你像我一样存储了matlab矩阵。
import numpy as np
def read_matrix(file_name):
return np.fromfile(file_name, dtype='<f') # little-endian single precision float
arr = read_matrix(file_path)
print arr[0:10] #sample data
print len(arr) # number of elements
您必须自己查找的数据类型(dtype)。有关此问题的帮助是here。我使用fwrite(fid,value,'single');
将数据存储在matlab中,如果你有相同的代码,上面的代码就可以了。
注意,返回的变量是一个列表;你必须格式化它以匹配你的数据的原始形状,在我的情况下,len(arr)是从大小为15360 x 20的矩阵307200。