2012-10-03 4 views
8

대량의 배열을 저장하고 다시로드하려고합니다. numpy.savenumpy.load을 사용하면 배열 값이 손상되거나 변경됩니다. 미리 저장하는 배열과 사후로드의 모양과 데이터 유형은 동일하지만 사후로드 배열의 값은 대다수가 0입니다. 배열은 (22915,22915)이고, 값은 float64이며, .npy 파일로서 3.94gb를 취하고, 데이터 항목의 평균은 0.1입니다 (합리적으로 0으로 변환 될 수있는 작은 플로트는 아님). 나는 numpy 1.5.1을 사용하고있다.numpy 저장 /로드가 손상되었습니다.

내가이 손실이 발생했기 때문에이 손상이 발생하는 이유에 대한 도움은 크게 감사하겠습니다. 아래는 위의 주장에 대한 증거를 제공하는 코드입니다.

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

당신은 시도 했습니까, 또는 Numpy의 새 버전을 사용해 볼 수 있습니까? – nneonneo

+0

나는 할 수 없다 - 1.5.1은 내가 사용하고있는 다른 라이브러리에 대한 의존성이다. 업데이트 된 버전 (내가 수행 한 검색 결과에 대한 증거가 있음)이 수정 된 경우 업그레이드를 시도 할 수는 있지만 분명히 더 많은/다른 문제가 발생할 수 있습니다. – wdwvt1

+3

시도 할 몇 가지 사항 : 1) 배열이 0이되는 위치를 찾습니다. 2) 배열의 마지막 행/열을 격리하여 인쇄합니다 (이상한 인쇄 문제인지 확인하기 위해). 3) 시도하십시오. ''r''을'load'의 두번째 매개 변수로 지정함으로써 메모리 맵핑을 사용합니다. – nneonneo

답변

1

이것은 알려진 issue입니다 (numpy 1.4와 링크됨에 유의하십시오). 정말로 업그레이드 할 수 없다면 저의 조언은 다른 방법으로 저장하려고 시도하는 것입니다 (savez, savetxt). getbuffer를 사용할 수있는 경우 바이트를 직접 쓸 수 있습니다. 다른 모든 것이 실패 할 경우 (그리고 업그레이드 할 수없는 경우), 자신 만의 저장 기능을 쉽게 작성할 수 있습니다.

관련 문제