2012-09-03 4 views
3

NumPySciPy을 사용하는 Python 프로젝트에서 작업하고 있습니다. 나는 다음과 같은 한 :대용량 데이터 보간

x = numpy.arange(-5,5,0.01) 
y = numpy.arange(-5,5,0.01) 

나는 또한 x의 기능을 가지고 있고이 보간 할 y 같은

# fxy = function of x and y in a grid 
# fxy.shape = (y.shape[0], x.shape[0]) 

것을 fxy 등 내가 0.0001을있는 기능 x에서 가치와 y 점을 가지고 또는 0.001 떨어져, 즉 fxy

finer_x = numpy.arange(-5,5,0.0001) 
finer_y = numpy.arange(-5,5,0.0001) 

# finer_fxy = function of finer_x and finer_y in a grid 
# finer_fxy.shape = (finer_y.shape[0], finer_x.shape[0]) 
에 평가하고 싶습니다. (210)

나는 scipy.interpolatebisplrepinterp2d 기능을 사용하려고 계속하지만 각각 그 기능을 사용하여

OverflowError: Too many data points to interpolate 

File "/usr/lib/python2.7/dist-packages/scipy/interpolate/fitpack.py", line 873, in bisplrep 
tx,ty,nxest,nyest,wrk,lwrk1,lwrk2) 
MemoryError 

를 얻을. 보간 된 데이터를 만드는 가장 좋은 방법은 무엇입니까?

+0

클래스 작업입니까? 예, 숙제 태그 – Curious

+0

을 추가합니다. 'finer_fxy'가 아마도'default 'float64's에 저장되어 있다면, 이것은 약 64 GiB의 메모리를 필요로 할 것입니다; 네가 다 떨어지고 있다는 것도 놀라운 일이 아니다. 대신 .001로 보간하면 기가비트보다 약간 작을 것입니다. 이는 훨씬 합리적입니다. – Dougal

+0

수업/숙제가 아닙니다. 사실, 제 목적을 위해서는 0.001을 사용할 수 있습니다. – eqb

답변

3

분명히 NumPy 플레이트에 너무 많은 포인트를 넣고 있습니다. 죄송합니다.

내 조언은 먼저 데이터를 플롯하고 상대적으로 선형 인 영역을 찾고 건너 뛴다는 것입니다. 즉, 배열을 다른 영역으로 분해하고 부분별로 보간을 수행하십시오.

+0

나는 이것을 시도 할 것이다. 감사! 이전 SO 게시물에서 비슷한 것을 읽었습니다. 시도하기 전에 뭔가 빠졌는 지 궁금합니다. – eqb

+0

중요한 점은 데이터를 현명하게 분해하는 것입니다. 예를 들어, 주어진 간격'[a : b]'에 선형 트렌드가 있다면, 중간 점'(a + b)/2'와 하나 후에 하나의 간격을 고려하는 것이 좋습니다. –

1

데이터가 일반 그리드에 있습니다 : RectBivariateSpline을 사용해보십시오.

bisplrep/interp2d는 분산 된 데이터입니다.