0

ユーザー定義の連続した2D x、y位置で、通常のデカルトメッシュ(i、j)で定義された2D関数の値を補間しようとしています。

私が試したのは、scipy.interpolate の関数 interp2d を使用して、適切なモデルで補間することにより (x,y) で f の値を返す関数を取得することです。

ドキュメントを参照してください:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html

次のコードは、私が持っているエラーを再現します。そんなに多くのメモリを割り当てることができないため、interp2d がクラッシュするようです。

それ以外の方法でそれを行う方法はありますか?

   import scipy.interpolate as interp
   import numpy as np


   def main():
       x = np.arange(4098)/4097.
       z = np.arange(1602)/1601.

       xx,zz = np.meshgrid(x,z)
       f = np.sin(xx**2 + zz**2)

       ff = interp.interp2d(x,z,f, kind='linear')


   if __name__ == '__main__':
       main()
4

2 に答える 2

3

問題は、スプライン フィッティング ルーチンがノットの選択に必要なスペースの量を非常に悲観的に見積もることです (このアルゴリズム: http://netlib.org/dierckx/surfit.f、lwrk2 の説明を参照し、悲観的な方法 --- 約 200 GB になります)。

これは非構造化データ補間ルーチンであることに注意してください --- interp2d には、通常のグリッドにない入力データを渡すこともできます。4098*1602=6564996 は、この場合のようにデータがグリッド上に規則的に配置されている場合は簡単に管理できますが、散在するデータの補間にはかなり多くのデータ ポイントです。

これがどのように機能するかは Scipy 0.12.0 で変更されました。この場合、interp2d はデータが長方形のグリッド上にあると推測し、この特殊なケースではより効率的なアルゴリズムを使用します。

于 2013-04-10T22:27:56.330 に答える