我目前正在尝试将数组保存为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文件。
感谢您的反馈。
纳兹穆尔
答案 0 :(得分:4)
这里有几个问题。
__main__ == "__main__"
。""
。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;