Python 根据 array1 中的值在 numpy array2 中查找值
Python find values in numpy array2 based on values in array1
假设我有三个数组:
array1 = ['1', '2', '3', '2']
array2 = ['6', '2', '7', '3']
array3 = ['a', 'b', 'c', 'd']
我想遍历 array1 中的每个元素和 return 当且仅当它在 array2 中时才匹配的值。换句话说,我希望输出为:
array2_in_1 = ['1' '3' '1']
因为 '1' 不在 array2 中,所以没有考虑。
'2'在array2的第一个索引中,因此该索引被记录为'1'
'3' 在 array2 的第 3 个索引中,因此记录为 '3'
'2'在array2的第一个索引处再次记录,所以重复'1'
使用这些索引,然后我想根据 array3 中的这些索引访问元素:
array3_in_2 = ['b' 'd' 'b']
使用像 intersect 这样的命令只 returns 唯一值,所以任何重复项都被删除(这不是这里想要的)。
我有一些类似的东西:
vals = []
for i in array1:
idx = np.where(array2 == i)
if len(vals) == 0:
vals = array2[idx]
else:
vals = np.concatenate((vals, array2[idx]))
给出了正确的答案,但是是否有更 pythonic 或更快的方法来做到这一点?
您可以不循环执行此操作:
def ind():
array1 = np.array(['1', '2', '3', '2'])
array2 = np.array(['6', '2', '7', '3'])
array3 = np.array(['a', 'b', 'c', 'd'])
return array3[(array1 == array2[:,np.newaxis]).T.nonzero()[1]]
结果:
>>> ind()
array(['b', 'd', 'b'],
dtype='<U1')
假设我有三个数组:
array1 = ['1', '2', '3', '2']
array2 = ['6', '2', '7', '3']
array3 = ['a', 'b', 'c', 'd']
我想遍历 array1 中的每个元素和 return 当且仅当它在 array2 中时才匹配的值。换句话说,我希望输出为:
array2_in_1 = ['1' '3' '1']
因为 '1' 不在 array2 中,所以没有考虑。
'2'在array2的第一个索引中,因此该索引被记录为'1'
'3' 在 array2 的第 3 个索引中,因此记录为 '3'
'2'在array2的第一个索引处再次记录,所以重复'1'
使用这些索引,然后我想根据 array3 中的这些索引访问元素:
array3_in_2 = ['b' 'd' 'b']
使用像 intersect 这样的命令只 returns 唯一值,所以任何重复项都被删除(这不是这里想要的)。
我有一些类似的东西:
vals = []
for i in array1:
idx = np.where(array2 == i)
if len(vals) == 0:
vals = array2[idx]
else:
vals = np.concatenate((vals, array2[idx]))
给出了正确的答案,但是是否有更 pythonic 或更快的方法来做到这一点?
您可以不循环执行此操作:
def ind():
array1 = np.array(['1', '2', '3', '2'])
array2 = np.array(['6', '2', '7', '3'])
array3 = np.array(['a', 'b', 'c', 'd'])
return array3[(array1 == array2[:,np.newaxis]).T.nonzero()[1]]
结果:
>>> ind()
array(['b', 'd', 'b'],
dtype='<U1')