私は、3 次元空間に配置されたデータ ポイントの大規模なセット (400 万以上) があり、それぞれにスカラー関数値があるという問題に取り組んでいます。これは、XD、YD、ZD、および FD の 4 つの配列で表されます。タプル (XD[i]、YD[i]、ZD[i]) は、FD[i] の値を持つデータ ポイント i の位置を参照します。
データと同じスペースに、たとえば 100x100x100 ポイントの直線グリッドを重ね合わせたいと思います。このグリッドは次のように設定されます。
[XGrid, YGrid, ZGrid] = np.mgrid[Xmin:Xmax:Xstep, Ymin:Ymax:Ystep, Zmin:Zmax:Zstep]
XG = XGrid[:,0,0]
YG = YGrid[0,:,0]
ZG = ZGrid[0,0,:]
XGrid は、グリッド内の各ポイントの x 値の 3D 配列です。XG は、XStep の距離で区切られた、Xmin から Xmax までの x 値の 1D 配列です。
内挿アルゴリズムを使用したいのですが、各グリッド ポイントの関数の値を周囲のデータに基づいて見つける必要があります。このアルゴリズムでは、関心のあるグリッド ポイントに最も近い (または少なくとも近い) 20 個のデータ ポイントが必要です。つまり、グリッド ポイント (XG[i]、YG[j]、ZG[k]) について、20 個の最も近いデータ ポイントを見つけたいと考えています。
私が考えることができる唯一の方法は、各データ ポイントを通過する 1 つの for ループと、すべての (非常に多くの!) データ ポイントを通過する後続の埋め込み for ループを用意し、ユークリッド距離を計算し、20 個の最も近いものを選択することです。
for i in range(0,XG.shape):
for j in range(0,YG.shape):
for k in range(0,ZG.shape):
Distance = np.zeros([XD.shape])
for a in range(0,XD.shape):
Distance[a] = (XD[a] - XG[i])**2 + (YD[a] - YG[j])**2 + (ZD[a] - ZG[k])**2
B = np.zeros([20], int)
for a in range(0,20):
indx = np.argmin(Distance)
B[a] = indx
Distance[indx] = float(inf)
これにより、グリッド ポイントに最も近いデータ ポイントのインデックスの配列 B が得られます。これは、各グリッド ポイントの各データ ポイントを通過するのに時間がかかりすぎるように感じます。
距離を計算する前にデータポイントを整理する方法など、計算時間を短縮できる提案を探しています。