【问题标题】:Index a numpy array with another array用另一个数组索引一个 numpy 数组
【发布时间】:2016-03-09 01:36:37
【问题描述】:

我觉得很傻,因为这是一件如此简单的事情,但我在这里或其他任何地方都没有找到答案。

没有直接的方法可以用另一个索引一个 numpy 数组吗?

假设我有一个二维数组

>> A = np.asarray([[1, 2], [3, 4], [5, 6], [7, 8]])
array([[1, 2],
   [3, 4],
   [5, 6],
   [7, 8]])

如果我想访问元素 [3,1] 我输入

>> A[3,1]
8

现在,假设我将这个索引存储在一个数组中

>> ind = np.array([3,1])

这次尝试使用索引:

>> A[ind]
array([[7, 8],
       [3, 4]])

结果不是 A[3,1]

问题是:有数组 A 和 ind,获取 A[3,1] 的最简单方法是什么?

【问题讨论】:

    标签: python arrays numpy indexing


    【解决方案1】:

    只使用一个元组:

    >>> A[(3, 1)]
    8
    >>> A[tuple(ind)]
    8
    

    A[]实际上调用了特殊方法__getitem__

    >>> A.__getitem__((3, 1))
    8
    

    并使用逗号创建一个元组:

    >>> 3, 1
    (3, 1)
    

    将这两个基本的 Python 原则放在一起可以解决您的问题。

    如果您不需要 NumPy 数组功能,您可以首先将索引存储在元组中。

    【讨论】:

    • 谢谢,这正是我所希望的解决方案!
    【解决方案2】:

    那是因为通过给出一个你实际要求的数组

    A[[3,1]] 
    

    这给出了二维数组的第三个第一个索引,而不是你想要的数组第三个索引的第一个索引。

    你可以使用

     A[ind[0],ind[1]]
    

    你也可以使用(如果你想同时使用更多的索引);

    A[indx,indy]
    

    其中indxindy 是相应的第一维和第二维索引的numpy 数组。

    有关 numpy 数组的所有可能索引方法,请参见此处:http://docs.scipy.org/doc/numpy-1.10.1/user/basics.indexing.html

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 1970-01-01
      • 2021-05-07
      • 2020-06-11
      • 2018-10-25
      • 1970-01-01
      相关资源
      最近更新 更多