2012-12-02 29 views
6

Với một đại diện nhị phân thô của một mảng numpy, bộ hoàn chỉnh siêu dữ liệu cần thiết để khôi phục lại mảng một cách rõ ràng là gì?của numpy tostring/fromstring --- những gì tôi cần phải xác định để khôi phục mảng

Ví dụ,

>>> np.fromstring(np.array([42]).tostring()) 
array([ 2.07507571e-322]) 

mà là để được mong đợi (với một nhận thức muộn màng, ít nhất): ở đây tôi chưa nói với fromstring mong đợi ints, vì vậy nó đi với phao mặc định.

Nhưng có vẻ như với tôi rằng chỉ cần chỉ định dtype=np.float64 hoặc tương tự có thể hoặc có thể không đủ. Ví dụ:

>>> a = np.array([42.]) 
>>> a.dtype 
dtype('float64') 
>>> a.dtype.byteorder 
'=' 

the docs tell me có nghĩa là 'thứ tự gốc'. Có nghĩa là, nó sẽ được giải thích khác nhau trên một máy tính lớn và nhỏ - hoặc tôi thiếu một cái gì đó đơn giản?

+0

sys.byteorder cung cấp cho các endianness của máy. Có vẻ như bạn cũng phải lưu giá trị này. – unutbu

+1

để lưu/tải mảng numpy theo cách độc lập với nền tảng mà bạn có thể sử dụng [numpy.save/.load functions] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.load.html# numpy.load). – jfs

+0

@ J.F.Sebastian: Đối với một mảng duy nhất, có. Trong trường hợp của tôi, tôi đã 10 đến 100 nghìn mảng, mà tôi đang bán phá giá cho một db sqlite (cùng với các công cụ khác không phải mảng). Bên cạnh đó, tôi chỉ tò mò như những gì nó cần để được nền tảng độc lập :-). –

Trả lời

3

sys.byteorder mang đến độ bền của máy.


Tuy nhiên, như @ J.F.Sebastain, @seberg và @jorgeca đã gợi ý, np.savez là một cách tốt hơn để đi. Các help docstring shows

import io 
content = io.BytesIO() 
np.savez(content, x=x, y=y) 
content.seek(0) 

có nghĩa là bạn có thể tiết kiệm chuỗi content đến một cơ sở dữ liệu SQLite.

Sau đó, khi bạn chọn chuỗi này từ cơ sở dữ liệu, nó có thể được tái chuyển đổi thành các mảng NumPy với

data = np.load(content) 
+0

Tại sao bạn sử dụng 'tempfile' thay vì' StringIO'? – seberg

+0

@seberg: Có, bạn đúng - cảm ơn vì đã sửa! Một StringIO (hoặc tương thích trong tương lai, một BytesIO) sẽ tốt hơn ở đây. – unutbu

Các vấn đề liên quan