2012-10-03 50 views
8

Estoy tratando de guardar una gran matriz numpy y volver a cargarla. Usando numpy.save y numpy.load, los valores de la matriz están dañados/cambian. La forma y el tipo de datos de la matriz de guardado previo y posterior a la carga son los mismos, pero la matriz posterior a la carga tiene la gran mayoría de los valores a cero. La matriz es (22915,22915), los valores son float64, toma 3,94 gb como un archivo .npy y las entradas de datos promedian aproximadamente .1 (no pequeños flotantes que podrían convertirse razonablemente en ceros). Estoy usando numpy 1.5.1.numpy save/load corrompiendo una matriz

Cualquier ayuda sobre por qué está ocurriendo esta corrupción sería muy apreciada porque estoy perdido. A continuación se muestra un código que proporciona evidencia de los reclamos anteriores.

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

¿Has probado o puedes probar una nueva versión de Numpy? – nneonneo

+0

No puedo - 1.5.1 es una dependencia para las otras bibliotecas que estoy usando. Si está arreglado en una versión actualizada (que había alguna evidencia de las búsquedas que realicé) entonces quizás pueda intentar actualizar, aunque obviamente esto podría causar más/otros problemas. – wdwvt1

+3

Un par de cosas que intentar: 1) buscar la posición donde la matriz se pone a cero, 2) intentar imprimir la última fila/columna de la matriz de forma aislada (para ver si puede ser un problema de impresión raro), 3) probar usando mapeo de memoria especificando ''r'' como un segundo parámetro para' cargar'. – nneonneo

Respuesta

1

Este es un conocido issue (tenga en cuenta que que une contra numpy 1,4). Si realmente no puede actualizar, mi consejo sería intentar guardar de una manera diferente (savez, savetxt). Si getbuffer está disponible, puede intentar escribir los bytes directamente. Si todo lo demás falla (y no puede actualizar), puede escribir su propia función de guardar con bastante facilidad.

Cuestiones relacionadas