2012-09-03 83 views
3

我正在研究一個使用NumPySciPy的Python項目。我有以下幾點:插值大數據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這樣,我都不得不x並且是0.0001函數值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]) 

我一直在試圖使用bisplrepinterp2d功能scipy.interpolate但我分別使用了這些功能得到

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

OverflowError: Too many data points to interpolate 

。創建插值數據的最佳方法是什麼?

+0

是班級工作嗎?如果是,則添加作業標籤 – Curious

+0

如果'finer_fxy'存儲在可能默認的'float64'中,則需要大約64 GiB的內存;毫不奇怪,你正在耗盡。如果你願意插入.001,而不是一個演出,這是更合理。 – Dougal

+0

不是功課/作業。實際上,對我而言,0.001是可以接受的。 – eqb

回答

3

很明顯,你在NumPy板上放了太多點,很抱歉聽到這個消息。

我的建議是首先繪製您的數據,找到相對線性的區域,然後跳過它們。也就是說,嘗試將你的數組分解成不同的區域,並執行分段插值。

+0

我會試試這個。謝謝!我在之前的一篇SO文章中讀到類似的東西,想知道如果我在嘗試之前錯過了某些東西。 – eqb

+0

臨界點將巧妙分解您的數據。例如,如果在給定的時間間隔'[a:b]'上看到一些線性趨勢,則可能需要考慮中點'(a + b)/ 2'前面的一個間隔,以及......之後的一個間隔...... –

1

您的數據在常規網格上:嘗試使用RectBivariateSpline。

bisplrep/interp2d用於分散數據。