【问题标题】:Python: use numpy array of indices to "lookup" values from another matrixPython:使用 numpy 索引数组从另一个矩阵“查找”值
【发布时间】:2018-02-09 18:44:06
【问题描述】:

我不确定以前是否有人问过这个问题,但我找不到这个看似简单的问题的解决方案。创建一个新矩阵的最快方法是“查找”某个 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。

【问题讨论】:

  • 那里有什么神奇的X
  • X 只是我想对其执行查找的一些矩阵。所以如果索引有 [1,1] 这意味着我想在 X 中查找索引 [1,1]。

标签: python numpy matrix


【解决方案1】:

使用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]])

【讨论】:

  • 谢谢!如果我有 700 行而不是 2 行,有没有办法在不复制和粘贴的情况下做到这一点?
  • @ru111 不复制粘贴到底是什么?
  • 啊没关系 - 我错误地认为你做了 ...0 和 ...1 因为我的示例中有两行 :)
  • 您能否解释一下为什么在 [...,0] 中需要 ..., ?
猜你喜欢
  • 1970-01-01
  • 2013-12-08
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多