Чтение двоичного файла преобразования 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)

Для этой распаковки я получаю ошибку как

"для распаковки требуется строковый аргумент длиной 4"

, Пожалуйста, предложите как-нибудь сделать это.

1 ответ

Я немного посмотрел на проблему в основном потому, что мне это нужно и в ближайшем будущем. Оказывается, есть очень простое решение, использующее NumPy, при условии, что у вас есть матричная матрица, хранящаяся, как я.

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.

Другие вопросы по тегам