在Matlab中将数组保存为bin,将其传递给Python并在Python中读取bin文件

时间:2011-06-11 04:39:50

标签: python matlab

我目前正在尝试将数组保存为Matlab中的bin文件,将其发送到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文件。

感谢您的反馈。

纳兹穆尔

1 个答案:

答案 0 :(得分:4)

这里有几个问题。

  1. 检查'main'时应使用双下划线。即__main__ == "__main__"
  2. 收集字节,而是始终存储 last 字节读取。因此,最后一个字节始终为""
  3. 最后,似乎缩进不正确。我假设这只是一个stackoverflow格式错误。
  4. 另一个潜在问题 - 在MATLAB中使用fwrite(fid,A)时,它假定您要写入字节(8位数)。但是,您的rand()命令会生成实数,因此MATLAB首先将结果舍入为整数,而二进制文件仅保留为“0”或“1”。
  5. 最后注意事项:一次读取一个字节的文件可能非常低效。以大块读取文件可能更好,或者 - 如果它是一个小文件 - 在一个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;