根据另外两个数组中公共值的索引从数组返回值

Tho*_*rth 5 python arrays performance numpy python-2.7

import numpy as np

a=np.random.randint(0,200,100)#rand int array
b1=np.random.randint(0,100,50)
b2=b1**3
c=[]
Run Code Online (Sandbox Code Playgroud)

我有一个问题我认为应该很容易但找不到解决方案,我想在两个数组中找到匹配的值,然后使用其中一个的索引在另一个数组中查找值

for i in range(len(a)):
    for j in range(len(b1)):
         if b1[j]==a[i]:
             c.append(b2[j])

c=np.asarray(c)
Run Code Online (Sandbox Code Playgroud)

显然上面的方法确实有效,但它很慢,这只是一个例子,在我实际做的工作中,b1,b2都是超过10,000个元素.

更快的解决方案?

Ale*_*ley 6

np.in1d(b1, a)返回一个布尔数组,指示是否b1找到每个元素a.

如果你想获得与和b2中常见值的索引相对应的值,你可以使用布尔数组来索引:ab1b2

b2[np.in1d(b1, a)]
Run Code Online (Sandbox Code Playgroud)

随着for循环被推到NumPy内部例程的水平,使用此函数应该快得多.