【问题标题】:Selection of elements from numpy array columns based on row index基于行索引从numpy数组列中选择元素
【发布时间】:2019-01-11 08:17:17
【问题描述】:

我有一个二维数组A 和一个索引列表idx,例如:

A = np.array([[ 1.,  0.,  0.],
             [ 0.,  1.,  0.],
             [ 0.,  0.,  1.],
             [ 0., -1.,  0.],
             [ 0.,  0.,  5.]])

idx = np.array([2, 1, 0, 1, 2])

我正在尝试沿列轴选择由idx 索引的A 的元素(在此示例中:array([0., 1., 0., -1., 5.]))。我怎么能在没有循环的情况下做到这一点?

谢谢!

【问题讨论】:

  • 为什么不想使用循环? - 这可以通过for 循环轻松解决。
  • @Alfie 因为 numpy 通常比 for 循环快得多。
  • @Alfie 正如@Luca 所说,numpy 操作比 Python 中的循环效率更高,除此之外,矩阵 A 在我的问题中具有巨大的维度。

标签: python numpy search indexing


【解决方案1】:
A[np.arange(np.size(idx)), idx]

array([ 0., 1., 0., -1., 5.])

来自文档的Advanced Indexing 部分:

当索引包含的整数数组数量与所要的数组一样多时 indexed 有维度,索引是直截了当的,但是 不同于切片。 [...] 最好通过一个例子来理解这一点。

【讨论】:

    【解决方案2】:

    索引 2D numpy 数组可能有点令人困惑。

    你需要:A[np.arange(0, A.shape[0]), idx]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多