私はPythonでスプラインクラスを作成しています。スプライン補間値を計算する方法では、最も近いx個のデータ点のインデックスが必要です。現在、簡易版は、次のようになりますインデックスの効率的な検索方法
def evaluate(x):
for ii in range(N): # N = len(x_data)
if x_data[ii] <= x <= x_data[ii+1]:
return calc(x,ii)
それは中x
嘘区間の下限インデックスii
を見つけ、スプライン補間を行う関数calc
、であることを利用するまで、だから、x_data
点のリストを反復処理しました。機能的である間に、x
がデータセットの最後に近い場合、これは大型のx_data
アレイでは効率が悪いようです。同じ機能を実行するために、より効率的または優雅な方法があります。これは、すべての間隔を繰り返しチェックする必要はありませんか?
注:は、x_data[ii] < x_data[ii+1]
のようにソートされていると想定できますが、必ずしも等間隔である必要はありません。
これは実際にはO(log n)です。そして、私は 'bisect()'のソースコードを調べました。バイナリ検索です。 –
私はこれがかなり機能するとは思わない。 'bisect([0,1,2]、0.1))'は0ではなく1を与えるので、 'index'と' index + 1'の値を比較すると、[[1,2] 0,1]である。 – DSM
@DSMは、x_dataがソートされた順番で残っているように、xの挿入ポイントをbisectで検索するため、結果に1を引いてネガを修正するだけです。 – Copperfield