2012-10-03 5 views
8

Sto provando a salvare un grande array numpy e lo ricarico. Utilizzando numpy.save e numpy.load, i valori dell'array sono danneggiati/modificati. La forma e il tipo di dati dell'array pre-saving e post-caricamento sono gli stessi, ma l'array di post-caricamento ha la maggior parte dei valori azzerati. L'array è (22915,22915), i valori sono float64, prende 3,94 gb come file .npy e le voci dei dati sono nella media di .1 (non piccoli caratteri che potrebbero essere convertiti a zero in modo ragionevole). Sto usando numpy 1.5.1.numpy save/load corrompendo un array

Qualsiasi aiuto sul motivo per cui questo danneggiamento si sta verificando sarebbe molto apprezzato perché sono in perdita. Di seguito è riportato un codice che fornisce la prova delle affermazioni di cui sopra.

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

Hai provato o sei in grado di provare una nuova versione di Numpy? – nneonneo

+0

Non riesco a - 1.5.1 è una dipendenza per le altre librerie che sto usando. Se è stato corretto in una versione aggiornata (che era presente nelle ricerche che ho condotto), allora forse posso provare ad aggiornare, anche se ovviamente questo potrebbe causare più/altri problemi. – wdwvt1

+3

Un paio di cose da provare: 1) cerca la posizione in cui l'array va a zero, 2) prova a stampare l'ultima riga/colonna dell'array in isolamento (per vedere se potrebbe essere un problema di stampa strano), 3) prova usando la mappatura della memoria specificando ''r'' come secondo parametro su' load'. – nneonneo

risposta

1

Si tratta di un noto issue (si noti che che collega contro NumPy 1.4). Se davvero non è possibile aggiornare, il mio consiglio sarebbe quello di provare a salvare in un modo diverso (savez, savetxt). Se è disponibile getbuffer, puoi provare a scrivere direttamente i byte. Se tutto il resto fallisce (e non è possibile aggiornare), è possibile scrivere la propria funzione di salvataggio abbastanza facilmente.