gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:26:19 27 4
gpt4 key购买 nike

我目前正在尝试在 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. 检查“main”时应使用双下划线。 IE。 __main__ == "__main__"
  2. 不是收集字节,而是始终存储读取的最后字节。因此,最后一个字节始终是 ""
  3. 最后,缩进似乎不正确。我认为这只是一个 stackoverflow 格式错误。
  4. 另一个潜在问题 - 当您在 MATLAB 中使用 fwrite(fid, A) 时,它假设您要写入字节(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;

关于python - 在Matlab中将数组保存为bin,将其传递给Python并在Python中读取bin文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6314120/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com