たとえば、時系列と値系列を含む、同じ長さの2つの1D配列があります。
t = linspace(0, 5, 5) # [0, 1.25, 2.5, 3.75, 5]
x = array(range(10, 25)) # [10, 11, 12, 13, 14]
たとえば、異なるサンプリングポイントを使用してx配列をリサンプリングする必要があります(開始ポイントと終了ポイントは同じですが、要素の数はいくつでもかまいません)。
r = linspace(0, 5, 4) # [ 0, 1.667, 3.333, 5]
x2 = resample(t, x, r) # [10, 11, 12, 14]
つまり、rの各時点はtの2つの時点の間に配置され、tの2つの下の点のインデックスを見つけたいと思います。インデックスの配列から、xの相対点を取得することができます。
ループのない、おそらくscipyの演算子を使用したベクトルベースのソリューションが必要です。scipyの関数を使用する場合に適しています。
編集:これが私が必要とすることを行うコードですが、より短く、より速く、ベクトルベースのソリューションの方が良いでしょう。私はそれを見つけることができませんでした(しかし試みるまで)。
def resample(t, r):
i, j, k = 0, 1, 0
s = []
while j < len(t):
if t[i] <= r[k] < t[j]:
s.append(i)
k += 1
else:
i += 1
j += 1
s.append(len(t) - 1)
return array(s)