5

Pythonでは、多次元(5+)パラメーター空間のベクトル値データを補間するルーチンを構築しようとしています。つまり、いくつかの入力変数を受け取り、いくつかの出力変数を返す関数があります。現時点では、ベクトルの要素ごとに1つの呼び出しがあります。データは列化されたファイルにあるので、

import numpy
[x_data,y_data,f1_data,f2_data] = numpy.loadtxt('data',unpack=True)

次に、SciPyの関数を使用して個々の補間器をインスタンス化します。

from scipy import interpolate
f1 = interpolate.LinearNDInterpolator((x_data,y_data),f1_data)
f2 = interpolate.LinearNDInterpolator((x_data,y_data),f2_data)
...

さて、補間呼び出しを行うときは、実際には1つの操作として実行できるはずですが、値などf1ごとに補間する必要があります。f2そして、1つの補間を行う方が5つ以上を行うよりも速いはずだと私は推測しています。

ベクトル(または配列)値の補間器を作成する方法はありますか?

で補間器を構築してみました

f = interpolate.LinearNDInterpolator((x_data,y_data),(f1_data,f2_data,...))

しかし、それはエラーを返します

ValueError:値とポイントの数が異なります

私もこの質問と回答を読みましたが、それはスカラーのベクトル値関数に関するものであり、明らかに。で処理できますinterp1d

4

1 に答える 1

7

scipy.interpolate.LinearNDInterpolatorデータを行優先の順序で受け取ることを期待します。たとえば、あなたの場合、最初の引数は配列のペアではなく、ペアの配列である必要があります。データをロードしたときにデータを転置したため、に渡す前にデータを再度転置する必要がありますLinearNDInterpolator。次のようなものを試してください:

points = numpy.array((x, y)).T
values = numpy.array((f1, f2)).T
f = interpolate.LinearNDInterpolator(points, values)
于 2012-09-12T17:00:34.490 に答える