2012-11-21 5 views
9

Próbuję wyprowadzić tablicę zmiennoprzecinkową 4D numpy do pliku tekstowego za pomocą numpy.savetxtCzy numpy.savetxt można użyć w N-wymiarowych grach z N> 2?

Jednak numpy daje błąd, mówiąc, że argument float jest wymagany, gdy próbuję przekazać tę tablicę. Niemniej jednak numpy doc określa, że ​​argument, który należy przekazać powinien być po prostu tablicą jak ... NIE, że powinien on mieć max. 2. Jedyny sposób, w jaki mogę to zrobić, to przez przekształcenie danych w 2D (i to w rzeczywistości nie jest zawsze praktyczny z powodów związanych z organizacją danych)

Czy istnieje sposób obejścia tego? Czy musi koniecznie przekształcić tablicę numpy w 2D? Spodziewałem się, że będę w stanie odczytać dane w fortranie, podobnie jak w przypadku kolumn po kolumnach (praca w wymiarach).

Czy są inne możliwości? Zauważ, że nie chcę używać formatu npy, ponieważ szukam kompatybilności z innym programem, który potrzebuje formatu zwykłego tekstu.

Odpowiedz

3

Innym podejściem jest, aby zapisać tablicę postaci prosta lista liczb (płaska wersja tablicy) i zapisz wzdłuż niej informację o jej kształcie.

Problem dotyczący tablic wielowymiarowych polega na tym, że przenoszenie ich z programu do programu nawet nie jest tak proste, jak w formacie tekstowym.

można zrobić coś takiego:

myarray = rand(5,5,5) 
name = 'myarray'+myarray.shape+'.txt' 
np.savetxt(name,myarray.flatten()) 

i wykorzystywać informacje na temat wielkości inclued w nazwie pliku, aby przywrócić pierwotny kształt

5

Jeśli spojrzeć na kodzie źródłowym numpy.savetxt znajdziesz

for row in X: 
     fh.write(asbytes(format % tuple(row) + newline)) 

tak numpy.savetxt będzie działać tylko dla 1- lub 2D tablic.

dla interoperacyjności, można użyć JSON, jeśli masz wystarczająco dużo pamięci do zamiany tablicy numpy do listy:

import json 
import numpy as np 
a = np.arange(24).reshape(-1, 2, 3, 4).astype('float') 
a[0,0,0,0] = np.nan 
with open('/tmp/out', 'w') as f: 
    json.dump(a.tolist(), f, allow_nan = True) 

plony

[[[[NaN, 1.0, 2.0, 3.0], [4.0, 5.0, 6.0, 7.0], [8.0, 9.0, 10.0, 11.0]], [[12.0, 13.0, 14.0, 15.0], [16.0, 17.0, 18.0, 19.0], [20.0, 21.0, 22.0, 23.0]]]] 
+0

thx, elegancki. nie nadaje się jednak do moich celów. Jednak dzięki niemu odkryłem json. Thx za to. W każdym przypadku aplikacja, z którą muszę się komunikować, zawsze potrzebuje danych 2D (jak się dowiedziałem). Sądzę więc, że to zależy od mnie do "inteligentnego" przekształcenia tablicy numpy –

Powiązane problemy