Python:在另一个元素中查找所有元素元素的索引,包括重复数组

时间:2016-06-10 14:32:51

标签: python numpy

我有一个大小为100的数组A,其中可能包含重复元素。我有另一个大小为10的数组B,它有独特的元素。 B的所有元素都存在于A中,反之亦然。我有另一个对应于B的数组C,其中C的每个元素对应于B中的元素。

我想创建一个由C元素组成的数组A2,这样我就可以实现以下目的:

import numpy as np
A = np.array([1,1,4,5,5,6])
B = np.array([4,6,5,1)])
C = np.array(['A','B','C','D')])

我想创建A2:

A2 = np.array(['D','D','A','C','C','B'])

A2具有来自C的元素,基于A中B的元素的匹配索引。

3 个答案:

答案 0 :(得分:1)

无需numpy。只需zip BC数组到dictmap A的值:

>>> btoc = dict(zip(B, C))
>>> A2 = np.array(map(btoc.get, A))
>>> A2
array(['D', 'D', 'A', 'C', 'C', 'B'], dtype='|S1')

答案 1 :(得分:1)

这是使用np.searchsorted -

的NumPythonic方法
sidx = B.argsort()
out = C[sidx[np.searchsorted(B,A,sorter = sidx)]]

示例运行 -

In [17]: A = np.array([1,1,4,5,5,6])
    ...: B = np.array([4,6,5,1])
    ...: C = np.array(['A','B','C','D'])
    ...: 

In [18]: sidx = B.argsort()

In [19]: C[sidx[np.searchsorted(B,A,sorter = sidx)]]
Out[19]: 
array(['D', 'D', 'A', 'C', 'C', 'B'], 
      dtype='|S1')

答案 2 :(得分:0)

numpy_indexed包(免责声明:我是它的作者)包含在一次通话中执行此操作的功能; npi.indices,它是list.index的向量化等价物。

import numpy as np
A = np.array([1,1,4,5,5,6])
B = np.array([4,6,5,1])
C = np.array(['A','B','C','D'])

import numpy_indexed as npi
i = npi.indices(B, A)
print(C[i])

性能应与Divakar的解决方案类似,因为它的运行方式相同;但所有这些都包含在一个方便的包中,包含测试和所有。