2015-11-12 13 views

答えて

6

あなたが使用することができます。たとえばA.

内のBの値210、あなたは秩序を維持を気にしている場合 - 一般的なケースでは

np.searchsorted(A,B) 

A & Bがソートされていない配列である場合、あなたはそのように、np.searchsortedsorterオプションにもたらすことができる -

sort_idx = A.argsort() 
out = sort_idx[np.searchsorted(A,B,sorter = sort_idx)] 

私は自分の好きなものをbroadcastingに追加して、一般的なケースを解決するためのミックスを作成します -

np.nonzero(B[:,None] == A)[1] 

サンプルラン -

In [125]: A 
Out[125]: array([ 7, 5, 1, 6, 10, 9, 8]) 

In [126]: B 
Out[126]: array([ 1, 10, 7]) 

In [127]: sort_idx = A.argsort() 

In [128]: sort_idx[np.searchsorted(A,B,sorter = sort_idx)] 
Out[128]: array([2, 4, 0]) 

In [129]: np.nonzero(B[:,None] == A)[1] 
Out[129]: array([2, 4, 0]) 
+0

これは私たちが順番を気にしないと仮定します。 [1、10、7]と同じB = [1,7,10]の結果を返します。 (OPの質問はいずれにせよ指定されていません) – DSM

+0

@DSM参考になったコメント!ありがとう!ジェネリックにしました。 – Divakar

4

searchsortedを試しましたか?ただ、完全性について

A = np.array([1,2,3,4,5,6,7,8,9,10]) 
B = np.array([1,7,10]) 

A.searchsorted(B) 
# array([0, 6, 9]) 
1

Aの値が負でないと合理的に小さい場合:

lookup = np.empty((np.max(A) + 1), dtype=int) 
lookup[A] = np.arange(len(A)) 
indices = lookup[B] 
関連する問題