2012-12-02 11 views
6

Biorąc pod uwagę nieprzetworzoną binarną reprezentację tablicy numpy, jaki jest kompletny zestaw metadanych potrzebnych do jednoznacznego odtworzenia tablicy?numpy's tostring/fromstring --- co muszę określić, aby przywrócić tablicę

Na przykład

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

których należy się spodziewać (z perspektywy czasu, co najmniej): tutaj mam nie powiedział fromstring oczekiwać ints, więc to idzie z domyślnym pływaka.

Ale wydaje mi się, że samo podanie numeru dtype=np.float64 może być wystarczające lub nie. Na przykład:

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

która the docs tell me oznacza "natywną kolejność". Co oznacza, że ​​będzie inaczej interpretowana na maszynach typu big-endian i little-endian - czy też brakuje mi czegoś prostego?

+0

sys.byteorder daje endianness maszyny. Wygląda na to, że musisz też zapisać tę wartość. – unutbu

+1

aby zapisać/załadować numpy array w sposób niezależny od platformy, możesz użyć funkcji [numpy.save/.load] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.load.html# numpy.load). – jfs

+0

@ J.F.Sebastian: Dla pojedynczej tablicy, tak. W moim przypadku mam od 10 do 100 tysięcy tablic, które zrzucam do sqlite db (wraz z innymi, nieszablonowymi). Poza tym jestem po prostu ciekawa, jak to jest być niezależnym od platformy :-). –

Odpowiedz

3

sys.byteorder daje endianness maszyny.


Jednakże, jak @ J.F.Sebastain, @seberg i @jorgeca sugerują, np.savez jest lepsza droga. help docstring shows

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

co oznacza, można zapisać ciąg content do bazy sqlite.

Następnie po wybraniu ten ciąg z bazy danych, nie może być ponownie przekształcony NumPy tablic z

data = np.load(content) 
+0

Dlaczego używasz 'tempfile' zamiast' StringIO'? – seberg

+0

@seberg: Tak, masz rację - dzięki za poprawkę! StringIO (lub przyszłej kompatybilności, BytesIO) byłoby lepiej tutaj. – unutbu

Powiązane problemy