我想將numpy浮點數組的內容作爲有符號16位整數保存到原始二進制文件中。我試圖用ndarray.tofile來完成這個,但我無法弄清楚正確的格式字符串。似乎該文件以雙格式保存,無論我如何選擇格式字符串。我該怎麼做呢? 謝謝。使用NumPy數組數據寫入原始二進制文件
8
A
回答
19
我認爲這樣做最簡單的方法是先轉換陣列INT16,
array.astype('int16').tofile(filename)
8
看一看的結構模塊,嘗試這個例子:
import struct
import numpy
f=open("myfile","wb")
mydata=numpy.random.random(10)
print(mydata)
myfmt='f'*len(mydata)
# You can use 'd' for double and <or> to force endinness
bin=struct.pack(myfmt,*mydata)
print(bin)
f.write(bin)
f.close()
+10
根據經驗,我強烈建議**反對使用'struct.pack'。它的API需要將數組(即使用'*'運算符)放入變量,這對大數組大小會影響性能**。陣列中的每個元素都需要一個新的即時64位指針(在64位機器上)在堆棧上創建,以指向該元素。只要堅持'tostring' /'tobytes' /'tofile'來避免這種開銷。例如,在我們的例子中,我們正在處理100 Mb陣列,這導致了6.4 Gb的RAM,所以'struct.pack'可以完成它的工作。 –
0
您可能使用scipy.io.savemat它允許將姓名和數組的字典到Matlab風格的文件:
import scipy.io as sio
sio.savemat(filename, pydict)
這裏pydict可能是= { '名1':np.array1, '名2':np.array2,...}
要加載你只需要字典:
pydict = sio.loadmat(filename)
相關問題
- 1. 寫入原始二進制文件java
- 2. 將numpy數組的大小寫入二進制文件
- 3. 將二進制數據寫入文件
- 4. 將原始二進制文件寫入C中文件
- 5. 使用FileSystemObject寫入二進制數據()
- 6. 寫入二進制數據
- 7. 將原始文件(二進制數據)轉換爲XML文件
- 8. 如何使用Python將數據寫入二進制文件
- 9. 如何使用node.js將二進制數據寫入文件?
- 10. QR碼 - 原始二進制數據
- 11. 將bz2壓縮的二進制文件導入爲numpy數組
- 12. 複製二維數組使用.clone()仍引用原始數據
- 13. 將二維數組寫入/讀取二進制文件C++
- 14. Python:將numpy數組(int)寫入無填充的二進制文件
- 15. 使用原始二進制數據使用src的HTML5
- 16. 寫回數據到二進制文件
- 17. 寫大二進制數據到文件
- 18. 將原始二進制數據轉換爲圖像文件?
- 19. 從二進制文件寫入和讀取整數數組
- 20. 如何從使用numpy的tofile編寫的原始二進制文件讀取浮點數()
- 21. 使用C寫入二進制文件#
- 22. 爲原始數據創建框架或二進制讀寫
- 23. 寫的字符串二進制數據的二進制文件
- 24. 寫C數組包含二進制數據到文件
- 25. 將二進制文件讀入數組
- 26. 寫入二進制文件?
- 27. 寫入二進制文件
- 28. 寫入二進制文件
- 29. 寫入二進制文件
- 30. 使用python處理原始二進制圖像數據
的[numpy的文檔] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ndarray.tofile.html)陳述「關於字節順序和精度的信息丟失」。這是保證在所有平臺上工作嗎? – Gilly
'tofile'只寫入數組的原始二進制數據,而不是數組的元數據。一個典型的用例是打開一個文件,寫一個適合文件類型的頭文件,並使用'tofile'來填充原始數據。讀取文件的軟件負責從頭中推斷元數據(字節順序,精度,形狀),並將原始數據變爲適合該平臺的格式。沒有元數據,就無法正確解釋數組的原始內容。 如果您只需要讀取和寫入數組,請查看「python hd5」或「numpy.save」。 –
謝謝!即使當我創建指定'np.array([],dtype = np.int8)''的數組時,這個額外的'astype'也是需要的。 –