【问题标题】:Matlab to Python Conversion binary file readMatlab 到 Python 转换二进制文件读取
【发布时间】:2015-10-24 15:17:36
【问题描述】:

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

。 请提出一些使其工作的方法。

【问题讨论】:

标签: python matlab


【解决方案1】:

我对这个问题进行了一些研究,主要是因为我在不久的将来也需要这个。事实证明,使用 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) 是 307200,来自大小为 15360 x 20 的矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2019-12-03
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2012-02-01
    相关资源
    最近更新 更多