【问题标题】:write numpy array with its size to binary file将 numpy 数组及其大小写入二进制文件
【发布时间】:2012-10-28 18:31:50
【问题描述】:

我需要将 2D numpy 数组写入文件,包括它的维度,以便我可以从 C++ 程序中读取它并创建相应的数组。

我已经编写了一些简单的代码来保存数组并且可以从 C++ 中读取它,但是如果我尝试先写入数组的大小,它总是会给我一个错误。

这是我的简单 python 代码:

1 file = open("V.bin","wb")
2 file.write(V.shape)
3 file.write(V)
4 file.close()

第二行报错,我也试过了:

n1, n2 = V.shape
file.write(n1)
file.write(n2)

但它也不起作用。

我正在添加它显示的错误:

Traceback(最近一次调用最后一次): file.write(V.shape[0]) TypeError:必须是字符串或缓冲区,而不是int

谢谢!

【问题讨论】:

  • 我很确定 file.write() 需要一个字符串或缓冲区。 v.shape 是一个元组,将其作为参数传递将引发 TypeError

标签: python file numpy binary tuples


【解决方案1】:

您可以使用numpy.save() 以二进制形式保存。

【讨论】:

  • 这是 .npy 规范 (github.com/numpy/numpy/blob/master/doc/neps/npy-format.txt),因此可以在调用 save() 后从 C++ 代码中解释数据。
  • 但我需要先从 C++ 程序中读取行数和列数。它不会保存该信息,是吗?
  • 哦,没看到。无论如何,谢谢,但我已经用另一种方式解决了。
【解决方案2】:

如果你想将它保存为 ascii,你可以使用numpy.savetext

或者(因为看起来您正在处理二进制数据),如果您想保存原始数据流,您可以使用ndarray.tostring 获取可以直接转储到文件的字节字符串。

这种方法的优点是您可以创建自己的文件格式。缺点是您需要创建一个字符串才能将其实际写入文件。


既然你说你在第二行得到一个错误,这是一个错误,因为f.write 需要一个字符串。您正在尝试将其传递给tupleints。你可以使用struct.pack 来解决这个问题:

f.write(struct.pack('2i',*array.shape))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2017-02-12
    • 2018-03-20
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多