numpyで2つの配列をシーケンシャルに比較したい
ある配列 a
のサブセットの配列を b
としたときに、 b
の各要素が a
の何番目にあるか、を調べたいです。
具体的には以、下のコードを numpy
を使って高速に実現したいのですが、やり方がわかりません。
何卒ご教示お願いいたします。
a = [1,4,5,2,3,6]
b = [1,4,3]
I = [-1] * len(b)
last = 0
for i,n in enumerate(b):
I[i] = a.index(n, last)
last = I[i] + 1
print(I)
2018/06/20
言葉足らずでしたので補足させていただきます。
任意の i
について b[i] == a[j]
を満たす j
が必ず存在します。
また、a と b の関係は、順番も保存されます。
つまり b[i] == a[j] and b[i+1] == a[k]
のとき、常に j<k
です。
何卒よろしくお願いします。
2018/06/23
言葉足らずでしたので補足させていただきます。
bの各要素が、「aの中での順番」通りにならんでいることは保証されますが、a自体はソートされているわけではありません。
合わせてサンプルコードを修正しました。
度々申し訳ありません。