2012-10-03 15 views
8

Próbuję zapisać dużą tablicę numpy i ponownie ją załadować. Przy użyciu wartości numpy.save i numpy.load wartości tablic są uszkodzone/zmienione. Kształt i typ danych wstępnego zapisywania macierzy i późniejszego ładowania są takie same, ale tablica po załadowaniu ma wyzerowaną większość wartości. Tablica jest (22915,22915), wartości są float64, zajmuje 3,94 gb jako plik. Npy, a wpisy danych średnio około .1 (nie tiny pacek, które można rozsądnie przekonwertować do zer). Używam numpy 1.5.1.numpy save/load uszkodzenie tablicy

Każda pomoc dotycząca tego, jak doszło do tego rodzaju korupcji, byłaby bardzo doceniana, ponieważ nie jestem w stanie tego zrobić. Poniżej znajduje się kod dostarczający dowody powyższych zastrzeżeń.

In [7]: m 
Out[7]: 
     array([[ 0.  , 0.02023, 0.00703, ..., 0.02362, 0.02939, 0.03656], 
      [ 0.02023, 0.  , 0.0135 , ..., 0.04357, 0.04934, 0.05651], 
      [ 0.00703, 0.0135 , 0.  , ..., 0.03037, 0.03614, 0.04331], 
      ..., 
      [ 0.02362, 0.04357, 0.03037, ..., 0.  , 0.01797, 0.02514], 
      [ 0.02939, 0.04934, 0.03614, ..., 0.01797, 0.  , 0.01919], 
      [ 0.03656, 0.05651, 0.04331, ..., 0.02514, 0.01919, 0.  ]]) 
In [8]: m.shape 
Out[8]: (22195, 22195) 

In [12]: save('/Users/will/Desktop/m.npy',m) 

In [14]: lm = load('/Users/will/Desktop/m.npy') 

In [15]: lm 
Out[15]: 
     array([[ 0.  , 0.02023, 0.00703, ..., 0.  , 0.  , 0.  ], 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ], 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ], 
       ..., 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ], 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ], 
       [ 0.  , 0.  , 0.  , ..., 0.  , 0.  , 0.  ]]) 
In [17]: type(lm[0][0]) 
Out[17]: numpy.float64 

In [18]: type(m[0][0]) 
Out[18]: numpy.float64 

In [19]: lm.shape 
Out[19]: (22195, 22195) 
+1

Czy próbowałeś już, czy jesteś w stanie wypróbować nową wersję Numpy? – nneonneo

+0

Nie mogę - 1.5.1 jest zależnością dla innych bibliotek, których używam. Jeśli jest on poprawiony w zaktualizowanej wersji (co było dowodem na to, że przeprowadziłem wyszukiwania), to może uda mi się go ulepszyć, chociaż oczywiście może to spowodować więcej/innych problemów. – wdwvt1

+3

Parowanie rzeczy do wypróbowania: 1) poszukaj pozycji, w której tablica przechodzi do zera, 2) spróbuj wydrukować ostatni wiersz/kolumnę tablicy w izolacji (aby sprawdzić, czy to może być dziwny problem z drukowaniem), 3) spróbuj za pomocą mapowania pamięci, określając ''r'' jako drugi parametr do' load'. – nneonneo

Odpowiedz

1

Jest to znany issue (należy pamiętać, że ten łączy się z numpy 1.4). Jeśli naprawdę nie można uaktualnić, moja rada to próba zapisania w inny sposób (savez, savetxt). Jeśli getbuffer jest dostępny, możesz spróbować bezpośrednio napisać bajty. Jeśli wszystko inne zawiedzie (i nie możesz uaktualnić), możesz całkiem łatwo napisać własną funkcję zapisu.