2013-09-01 54 views
1

我想寫一個numpy數組到文件,但是文件格式是這樣的,每個值必須只包含表示一個64位浮點數所需的8個字節。將numpy數組寫入文件字節順序問題?

盡我所知,ndarray.tofile(array),array.dtype ='float64'沒有完成這個,所以我該如何快速做到這一點?

+0

你爲什麼認爲'tofile()'沒有做你想做的事?你能顯示你正在使用的實際代碼和你得到的輸出嗎?我也不明白這個問題的標題是如何與問題本身相關的。 AFAIK如果你遇到了endianess問題,那麼你可以使用'byteswap()'方法來改變數組的字節順序(注意,文件不*保留這些信息,因此你應該知道*保存文件以便從另一臺機器打開它)。 – Bakuriu

+0

請告訴我們你做了什麼來得出這個結論。並記住[文檔]中的警告(http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tofile.html):「這是一個快速存儲數組的便利函數數據,丟失了有關字節順序和精度的信息,因此這種方法不適合用於在不同字節順序的機器之間存檔數據或傳輸數據的文件。 –

+0

endianness是問題,用byteswap()修復。謝謝。 – Saethlin

回答

3

tofile已經創建了您描述的二進制文件。你確定你調用的是正確的嗎?如果您打開代碼中的文件,是否記得以二進制模式打開它?下面是tofile如預期工作的例子:

>>> import numpy as np 
>>> a = np.array([1, 2, 3], dtype='float64') 
>>> a 
array([ 1., 2., 3.]) 
>>> a.tofile('foo') 

檢查該文件揭示了它是24個字節長,並且與對應於小端64位IEEE 754個浮點數的內容:

$ hexdump -C foo 
00000000 00 00 00 00 00 00 f0 3f 00 00 00 00 00 00 00 40 |[email protected]| 
00000010 00 00 00 00 00 00 08 40       |[email protected]| 
00000018