我有一个大小为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的元素的匹配索引。
答案 0 :(得分:1)
无需numpy
。只需zip
B
和C
数组到dict
和map
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
-
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的解决方案类似,因为它的运行方式相同;但所有这些都包含在一个方便的包中,包含测试和所有。