Matlab -> Python, как мне преобразовать двоичный файл в массив 1d float?Прекрасно работает в Matlab, но не может воспроизвести в Python - PullRequest
0 голосов
/ 12 декабря 2018

В Matlab раздел блока двоичных файлов 'block' имеет размер 2048 байт и читается следующим образом:

fseek(fileID, 2024, 'bof');
data = fread(fileID, block, '*float');

Выходные данные - это массив одинарной точности 2048x1, пример ниже ...

15.5567
-1.9876
0.0529
25.97620

В Python я стараюсь искать в том же разделе файла и использовать 2048 байт «блок» для чтения двоичного раздела.Затем я попытался использовать функцию struct unpack для преобразования двоичного кода в числа с плавающей запятой одинарной точности.

fileID.seek(2024,0)
data = unpack('2048f',block)

Сначала я получаю ошибки для байтов объекта длины.Поэтому я изменяю размер, чтобы увидеть, даст ли вывод хотя бы что-то похожее.

data = unpack('512f',block)
print(data)

Вывод дает очень маленькие и большие числа

-14.858826637268066
5.938749347655264e-36
1.767982006072998
-24509016064.0

Любая помощь приветствуется.Я также пытался использовать

data = numpy.frombuffer(block, dtype=numpy.float32)

с практически одинаковыми результатами.

1 Ответ

0 голосов
/ 12 декабря 2018

Вот ответ, который я нашел.Работает отлично.

 data = []

 for i in range(0, 2048): 
    data.append(unpack('>f', fileID.read(4))[0]

Вывод данных точно такой же, как в Matlab.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...