映射两个numpy数组

时间:2015-10-16 11:00:44

标签: python numpy

我有两个numpy数组A和B.

A = np.array ([[ 1  3] [ 2  3]  [ 2  1] ])

B = np.array([(1, 'Alpha'), (2, 'Beta'), (3, 'Gamma')]

如何将A与B映射以获得类似的内容:

result = np.array ([[ 'Alpha'  'Gamma'] [ 'Beta'  'Gamma']  ['Beta'  'Alpha'] ])

我已尝试map(B['f1'],A),但我得到了TypeError: 'numpy.ndarray' object is not callable

4 个答案:

答案 0 :(得分:2)

您可以使用字典和列表理解:

>>> d=dict(B)
>>> np.array([[(d[str(i)]),d[str(j)]] for i,j in A])
array([['Alpha', 'Gamma'],
       ['Beta', 'Gamma'],
       ['Beta', 'Alpha']], 
      dtype='|S5')

答案 1 :(得分:2)

不使用任何特定的numpy事情你可以做:

d = dict(B)
[[d.get(str(y)) for y in x] for x in A]

答案 2 :(得分:1)

这是NumPythonic矢量化方法 -

B[:,1][(A == B[:,0].astype(int)[:,None,None]).argmax(0)]

在一般案例上运行示例 -

In [118]: A
Out[118]: 
array([[4, 3],
       [2, 3],
       [2, 4]])

In [119]: B
Out[119]: 
array([['3', 'Alpha'],
       ['4', 'Beta'],
       ['2', 'Gamma']], 
      dtype='|S5')

In [120]: B[:,1][(A == B[:,0].astype(int)[:,None,None]).argmax(0)]
Out[120]: 
array([['Beta', 'Alpha'],
       ['Gamma', 'Alpha'],
       ['Gamma', 'Beta']], 
      dtype='|S5')

答案 3 :(得分:1)

我认为你需要一个numpy解决方案来提高效率。在这种情况下,尝试 给你的关联表一个更“numpythonic”的外观:

A = np.array ([[ 1,  3], [ 2,  3] , [ 2,  1] ])
B = np.array([(0,'before'),(1, 'Alpha'), (2, 'Beta'), (3, 'Gamma')])
C=np.array([b[1] for b in B])

然后结果就是:C.take(A)