Matlab到Python二进制文件的转换读取



我是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的字符串参数"

我稍微看了一下这个问题,主要是因为我在不久的将来也需要它。事实证明,使用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)你必须自己找出。这里有帮助。我使用fwrite(fid,value,'single');在matlab中存储数据,如果你有相同的,上面的代码将工作。注意,返回的变量是一个列表;您必须将其格式化以匹配数据的原始形状,在我的例子中,len(arr)是307200,来自大小为15360 x 20的矩阵。

最新更新