2012-11-08 129 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