Tôi muốn lưu nội dung của mảng phao vào một tệp nhị phân thô dưới dạng số nguyên 16 bit đã ký. Tôi đã cố gắng thực hiện điều này bằng cách sử dụng ndarray.tofile nhưng tôi không thể tìm ra chuỗi định dạng phù hợp. Dường như tệp được lưu ở định dạng kép, mo vấn đề cách tôi chọn chuỗi định dạng. Làm thế nào để tôi làm điều này? Cảm ơn.Viết một tệp nhị phân thô với dữ liệu mảng NumPy
Trả lời
Tôi nghĩ rằng cách dễ nhất để làm điều này là lần đầu tiên chuyển đổi mảng để int16,
array.astype('int16').tofile(filename)
Hãy nhìn vào các mô-đun struct, hãy thử ví dụ này:
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()
Dựa trên kinh nghiệm, tôi khuyên bạn nên ** chống lại ** việc sử dụng 'struct.pack'. API của nó yêu cầu bạn phải loại bỏ mảng (ví dụ: sử dụng toán tử '*') thành các biến sẽ ảnh hưởng đến hiệu suất ** đáng kể ** đối với các kích thước mảng lớn. Mỗi phần tử của mảng sẽ cần một con trỏ 64 bit mới (trên máy 64 bit) được tạo trên ngăn xếp để trỏ vào phần tử đó. Chỉ cần dính vào 'tostring' /' tobytes'/'tofile' để tránh chi phí này. Ví dụ, trong trường hợp của chúng ta, chúng ta đã xử lý các mảng 100 Mb dẫn đến một con số khổng lồ 6.4 Gb RAM để 'struct.pack' có thể thực hiện công việc của nó. –
Bạn có thể sử dụng scipy.io.savemat cho phép lưu từ điển tên và mảng vào tệp kiểu Matlab:
import scipy.io as sio
sio.savemat(filename, pydict)
Đây pydict có thể = { 'name1': np.array1, 'name2': np.array2, ...}
Để tải dict bạn chỉ cần:
pydict = sio.loadmat(filename)
- 1. Làm cách nào để viết dữ liệu nhị phân thô bằng Python?
- 2. Ghi dữ liệu nhị phân trên iPhone
- 3. Đăng dữ liệu nhị phân với curl
- 4. Đọc/Viết Tệp nhị phân
- 5. Dữ liệu nhị phân với pyserial (cổng nối tiếp python)
- 6. tiết kiệm một mảng NumPy với dữ liệu hỗn hợp
- 7. Đọc dữ liệu nhị phân từ Console.In
- 8. Đọc dữ liệu có cấu trúc từ tệp nhị phân -?
- 9. Python: viết một tệp wav vào mảng nổi numpy
- 10. Python viết các tệp nhị phân, byte
- 11. Đọc một tệp nhị phân với python
- 12. Đọc dữ liệu nhị phân (từ tệp) thành cấu trúc
- 13. Lưu khung dữ liệu dưới dạng tệp nhị phân
- 14. Đọc dữ liệu từ Dukascopy đánh dấu tệp nhị phân
- 15. Đọc một tệp nhị phân thành một mảng
- 16. Cách nối dữ liệu vào tệp nhị phân?
- 17. Tính tương tự dữ liệu nhị phân
- 18. DbUnit và dữ liệu nhị phân
- 19. Ghi dữ liệu nhị phân với FileSystemObject write()
- 20. Ghi dữ liệu nhị phân với Haskell để đọc bằng C?
- 21. StreamReader và dữ liệu nhị phân
- 22. Viết nhiều mảng numpy để nộp
- 23. Gửi dữ liệu nhị phân qua http
- 24. socket.io streaming dữ liệu nhị phân
- 25. Cách hiệu quả để viết một mảng NumPy lớn vào một tệp
- 26. Làm thế nào để giải mã chuỗi mã hóa "nhị phân" thành đệm nhị phân thô?
- 27. Gửi dữ liệu nhị phân với máy khách Restlet
- 28. Đăng dữ liệu thô với Python
- 29. cURL Dữ liệu nhị phân và dữ liệu biểu mẫu
- 30. Perl & MongoDB dữ liệu nhị phân
Các [NumPy tài liệu] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ndarray.tofile.html) nêu rõ "Thông tin về độ chính xác và độ chính xác bị mất". Người bảo vệ này có hoạt động trên tất cả các nền tảng không? – Gilly
'tofile' chỉ ghi dữ liệu nhị phân thô của mảng, chứ không phải siêu dữ liệu của mảng. Một trường hợp sử dụng điển hình là mở một tệp, viết tiêu đề thích hợp cho loại tệp và sử dụng 'tofile' để điền vào dữ liệu thô. Đó là trách nhiệm của phần mềm đọc tệp để phỏng đoán siêu dữ liệu (độ chính xác, độ chính xác, hình dạng) từ đầu trang và biến đổi dữ liệu thô thành một biểu mẫu thích hợp cho nền tảng đó. Không có siêu dữ liệu, không có cách nào để diễn giải chính xác nội dung thô của mảng. Nếu tất cả những gì bạn cần là đọc và viết mảng, hãy xem "python hd5" hoặc 'numpy.save'. –
Cảm ơn bạn! Cần thêm 'astype' này ngay cả khi tôi tạo mảng chỉ định' np.array ([], dtype = np.int8) '. –