2013-05-16 2 views
0

MATLAB에있는 프로젝트를 Python + Numpy로 변환하려고합니다. MATLAB에 메모리가 부족한 상태로 유지되기 때문입니다. 내가 가진 파일은 다소 길기 때문에 동일한 오류를 보여주는 최소한의 예제를 만들려고 노력했습니다.ndarray (Numpy)를 저장하려고 할 때 ValueError가 발생했습니다.

기본적으로 데이터 세트의 2 차원 막대 그래프를 만들고 일부 처리 후에 저장하려고합니다. 문제는 numpy.save 함수가 히스토그램 함수의 출력을 저장하려고 할 때 "ValueError : 시퀀스가있는 배열 요소 설정"을 던졌습니다. Numpy의 문서를 보면 문제를 찾을 수 없습니다.

파이썬의 내 버전은 2.6.6이고, 데비안 배포판의 Numpy 버전 1.4.1입니다.

import numpy as np 
import random 

n_samples = 5 
rows  = 5 

out_file = file('dens.bin','wb') 

x_bins = np.arange(-2.005,2.005,0.01) 
y_bins = np.arange(-0.5,n_samples+0.5) 

listy = [random.gauss(0,1) for r in range(n_samples*rows)] 

dens = np.histogram2d(listy, \ 
     range(n_samples)*rows, \ 
     [y_bins, x_bins]) 

print 'Write data' 
np.savez(out_file, dens) 
out_file.close() 

전체 출력 : (hist, x_bins, y_bins) : 실제로 세 개의 배열의 튜플을 반환

$ python error.py 
Write data 
Traceback (most recent call last): 
    File "error.py", line 19, in <module> 
    np.savez(out_file, dens) 
    File "/usr/lib/pymodules/python2.6/numpy/lib/io.py", line 439, in savez 
    format.write_array(fid, np.asanyarray(val)) 
    File "/usr/lib/pymodules/python2.6/numpy/core/numeric.py", line 312, in asanyarray 
    return array(a, dtype, copy=False, order=order, subok=True) 
ValueError: setting an array element with a sequence. 
+1

코드의 작품처럼로드 할 수 있습니다 나를 위해 우분투 12.04, 파이썬 2.7 및 numpy 1.6.1 –

+0

이상한입니다. 나는 더 많은 것을 실험했다. 피클 라이브러리를 사용하면 저장 작업이 가능하다. –

+2

'savez'의 도움은'np.savez (file, * args, ** kwds)'입니다. numpy의 버전이 목록을 압축 해제하지 않는다는 느낌이 들었습니다. 'np.savez (out_file, * dens)'로 시도해 볼 수 있습니까? –

답변

0

np.histogram2d있다. 이 세 가지를 모두 저장하려면 @Francesco가 말한대로 압축을 풀어야합니다.

dens = np.histogram2d(listy, 
         range(n_samples)*rows, 
         [y_bins, x_bins]) 
np.savez('dens.bin', *dens) 

또는 히스토그램 자체 만 있으면 필요한 정보 만 저장할 수 있습니다. 당신이, 그리고 대신 *args

denskw = dict(zip(['hist','y_bins','x_bins'], dens)) 
np.savez('dens.bin', **denskw) 

**kwds를 사용하는 이들 중 어떤 추적을 유지하려면

np.savez('dens.bin', dens[0]) 

, 당신은

dens = np.load('dens.bin') 
hist = dens['hist']# etc 
+0

감사합니다. 이것은 트릭을 수행합니다. –

관련 문제