Python:使用numpy索引数组从另一个矩阵“查找”值

时间:2018-02-09 18:44:07

标签: python numpy matrix

我不确定之前是否曾经问过这个问题,但我找不到解决这个看似简单问题的方法。什么是创建新矩阵的最快方法,该矩阵是一些numpy矩阵X的“查找”结果(使用在矩阵X中查找的索引数组)?我想要实现的例子:

indices = np.array([[[1,1],[1,1],[3,3]],[[1,1],[5,8],[6,9]]]) #[i,j]
new_matrix = lookup(X, use=indices)

输出类似于:

new_matrix = np.array([[3,3,7],[3,4,9]])

其中例如X [1,1]是3.我正在使用python 2.

1 个答案:

答案 0 :(得分:0)

使用sliced列索引X -

X[indices[...,0], indices[...,1]]

tuple -

X[tuple(indices.T)].T # or X[tuple(indices.transpose(2,0,1))]

示例运行 -

In [142]: X
Out[142]: 
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 3, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 7, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 4, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 9]])

In [143]: indices
Out[143]: 
array([[[1, 1],
        [1, 1],
        [3, 3]],

       [[1, 1],
        [5, 8],
        [6, 9]]])

In [144]: X[indices[...,0], indices[...,1]]
Out[144]: 
array([[3, 3, 7],
       [3, 4, 9]])