2012-11-08 71 views
4

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

我已经写了一些保存数组的简单代码,它可以从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) 

但它也不起作用。

我加入的错误它显示:

回溯(最近通话最后一个): file.write(V.shape [0]) 类型错误:必须是字符串或缓冲区,不是int

谢谢!

+1

你会得到什么错误? – Eric

+1

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

回答

2

如果您想将其另存为ascii,则可以使用numpy.savetext

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

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


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

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

谢谢,这工作。我会把这个标记为答案。 – Lautaro

5

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

+3

这里是.npy规范(https://github.com/numpy/numpy/blob/master/doc/neps/npy-format.txt),因此可以在调用save()函数后从C++代码中解释数据。 '。 –

+0

但我需要先阅读C++程序中的行数和列数。它不保存该信息,是吗? – Lautaro

+0

@Lautaro它呢,看到NPY格式的文档... – Bitwise