Сохраните массив как bin в Matlab, передайте его в Python и прочитайте файл bin в Python - PullRequest
3 голосов
/ 11 июня 2011

В настоящее время я пытаюсь сохранить массив как файл bin в Matlab, отправить его на Python и прочитать его на Python. Тем не менее, Matlab показывает ошибки при запуске. Я использую следующие коды:

Считать массив в Matlab, преобразовать в файл bin и передать в Python:

array1 = rand(5,1); %% array1 is the desired array that needs to be sent to Python

fid = fopen('nazmul.bin','wb'); %% I want to save array1 in the nazmul.bin file

fwrite(fid,array1);

status=fclose(fid);

python('squared.py','nazmul.bin'); %% I want to send the parameters to squared.py program

файл squared.py:

import sys

if __name__ == '__main__':
f = open("nazmul.bin", "rb")   # Trying to open the bin file

try:

   byte = f.read(1)       # Reading the bin file and saving it in the byte array

   while byte != "":

   # Do stuff with byte.

       byte = f.read(1)

   finally:

       f.close()

   print byte                # printing the byte array from Python

Однако, когда я запускаю эту программу, ничего не печатается. Я предполагаю, что файл bin не передается должным образом в файл squared.py.

Спасибо за ваш отзыв.

Nazmul

1 Ответ

4 голосов
/ 11 июня 2011

Здесь есть несколько проблем.

  1. Вы должны использовать двойное подчеркивание при проверке 'main'.Т.е. __main__ == "__main__".
  2. Вы не собираете байты, а скорее сохраняете последний прочитанный байт.Поэтому последний байт всегда равен "".
  3. Наконец, кажется, что отступ не верен.Я предполагаю, что это просто ошибка форматирования потока стека.
  4. Еще одна потенциальная проблема - когда вы используете fwrite (fid, A) в MATLAB, предполагается, что вы хотите записать байты (8-битные числа).Однако ваша команда rand() генерирует вещественные числа, поэтому MATLAB сначала округляет результаты до целых чисел, и ваш двоичный файл будет содержать только «0» или «1».

Последнее замечание: чтение файла одним байтомв то время, вероятно, очень неэффективно.Вероятно, лучше прочитать файл большими кусками или - если это маленький файл - прочитать весь файл за одну read() операцию.

Исправленный код Python выглядит следующим образом:

if __name__ == '__main__':
   f = open("xxx.bin", "rb")   # Trying to open the bin file

   try:
     a = [];
     byte = f.read(1)       # Reading the bin file and saving it in the byte array
     while byte != "":
       a.append(byte);
       # Do stuff with byte.
       byte = f.read(1)

   finally:
       f.close()

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