【问题标题】:numpy array indexing with boolean带有布尔值的numpy数组索引
【发布时间】:2017-08-06 04:02:34
【问题描述】:

我看到有人用布尔数组索引一个数组。我做了一些研究并测试了以下代码

import numpy as np
A=np.arange(30)
A.shape = (10,3)

这给出了矩阵

>>> A
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17],
       [18, 19, 20],
       [21, 22, 23],
       [24, 25, 26],
       [27, 28, 29]])

然后我就这样做了

B = A<10

这给了

B=array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True],
       [ True, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False],
       [False, False, False]], dtype=bool)

还有

A[B]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

这是我的问题,我通过输入完全相同的数组而不是放入变量B来尝试这样做,结果发现是一个错误

>>> A[[[ True,  True,  True],
...        [ True,  True,  True],
...        [ True,  True,  True],
...        [ True, False, False],
...        [False, False, False],
...        [False, False, False],
...        [False, False, False],
...        [False, False, False],
...        [False, False, False],
...        [False, False, False]]]
Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
IndexError: too many indices for array

我做错了什么,有什么不同?

谢谢

【问题讨论】:

  • 在第二种方法中,您作为列表输入,它不像A[B] 的第一种方法那样进行布尔掩码。
  • 在某些情况下,使用数组和列表进行索引是相同的,但这不是其中之一。

标签: python arrays numpy


【解决方案1】:

B 是一个数组,而[ True, False, .. ] 是一个列表。

这是一样的:

A[np.array([[ True,  True,  True],
           [ True,  True,  True],
           [ True,  True,  True],
           [ True, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False],
           [False, False, False]])]
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

【讨论】:

    【解决方案2】:

    使用:

    A[np.array([[ True,  True,  True],
        [ True,  True,  True],
        [ True,  True,  True],
        [ True, False, False],
        [False, False, False],
        [False, False, False],
        [False, False, False],
        [False, False, False],
        [False, False, False],
        [False, False, False]])]
    

    【讨论】:

      猜你喜欢
      • 2021-01-06
      • 1970-01-01
      • 2020-03-25
      • 2017-09-24
      • 1970-01-01
      • 2018-08-10
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多