私は2つのベクトル(1D配列)または異なるサイズを持っています。私はそれらの各点間の距離(ここでは差)を計算したい、すなわち、長いベクトルl
の最初の点と短いベクトルv
の各点との差、長いベクトルの2番目の点など真の場合、ブール値行列のインデックスの行/列にアクセス
結果を[len(l), len(l)-len(v)+1]
アレイ(d
)に保存したいとします。そうするために、私はフィルターマトリックスを使用することを考えていました(これは必須ではありません)。
import numpy
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
v = [1, 2, 3, 4]
nc, nr = len(l)-len(v)+1, len(l) # n_col, n_rows
x = numpy.array([[i-j for j in range(nc)] for i in range(nr)])
filter = ((x >= 0) & (x < len(v)))
d = numpy.zeros((nr, nc))
だから私のfilter
行列は次のとおりです。
True
値は私が期待する非ゼロ値を表し
[[ True False False False False False False]
[ True True False False False False False]
[ True True True False False False False]
[ True True True True False False False]
[False True True True True False False]
[False False True True True True False]
[False False False True True True True]
[False False False False True True True]
[False False False False False True True]
[False False False False False False True]]
。 d
の値をフィルタ(たとえばd[filter] = 2
)で変更することはできますが、x番目の点をl
といい、y番目の点はv
ではありません。
注意:私はを呼びたいと思っているインデックスである[0 1 0 2 1 0 3 2 1 0 3 2 1 0 3 2 1 0 3 2 1 0 3 2 1 3 2 3]
を返すことに気づきました。しかし、理解されるであろうエラー(TypeError: only integer arrays with one element can be converted to an index
)
filter
がTrue
又は(フィルタ行列を伴うまたは伴わない)別の溶液である行/列のインデックスにアクセスする方法上の任意のヘルプv[x[filter]]
返します。
出力は次のようになります。
[[ l[0]-v[0] 0 0 0 0 0 0]
[ l[1]-v[1] l[1]-v[0] 0 0 0 0 0]
[ l[2]-v[2] l[2]-v[1] l[2]-v[0] 0 0 0 0]
[ l[3]-v[3] l[3]-v[2] l[3]-v[1] l[3]-v[0] 0 0 0]
[ 0 l[4]-v[2] l[4]-v[2] l[4]-v[1] l[4]-v[0] 0 0]
[ 0 0 l[5]-v[3] l[5]-v[2] l[5]-v[1] l[5]-v[0] 0]
[ 0 0 0 l[6]-v[3] l[6]-v[2] l[6]-v[1] l[6]-v[0]]
[ 0 0 0 0 l[7]-v[3] l[7]-v[2] l[7]-v[1]]
[ 0 0 0 0 0 l[8]-v[3] l[8]-v[5]]
[ 0 0 0 0 0 0 l[9]-v[3]]]
入力例に適した出力は何ですか? – Allen
'numpy.where'を使用してください。 – MaxNoe
@Allen、質問の最後に出力を追加しました。 @MaxNoe、私は 'numpy.where'をこの場合使用する方法を見ていません、より詳細を教えてくださいできますか? – Nuageux