当前位置: 代码迷 >> python >> Matlab到Python转换二进制文件读取
  详细解决方案

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

热度:53   发布时间:2023-06-16 10:08:28.0

我是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)

对于这个解压,我得到错误为

“解压缩需要长度为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)来自大小为15360 x 20的矩阵为307200。

  相关解决方案