我不确定之前是否曾经问过这个问题,但我找不到解决这个看似简单问题的方法。什么是创建新矩阵的最快方法,该矩阵是一些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.
答案 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]])