Numpy - 使用布尔数组进行索引

时间:2018-01-27 20:33:33

标签: python numpy

我有一个numpy数组形状(6,5),我试图用布尔数组索引它。我沿着列切片布尔数组,然后使用该切片索引原始数组,一切都很好,但是只要我沿着行执行相同的操作,我就会得到以下错误。以下是我的代码,

array([[73, 20, 49, 56, 64],
       [18, 66, 64, 45, 67],
       [27, 83, 71, 85, 61],
       [78, 74, 38, 42, 17],
       [26, 18, 71, 27, 29],
       [41, 16, 17, 24, 75]])

bool = a > 50
bool
array([[ True, False, False,  True,  True],
       [False,  True,  True, False,  True],
       [False,  True,  True,  True,  True],
       [ True,  True, False, False, False],
       [False, False,  True, False, False],
       [False, False, False, False,  True]], dtype=bool)

cols = bool[:,3] # returns values from 3rd column for every row
cols
array([ True, False,  True, False, False, False], dtype=bool)

a[cols]
array([[73, 20, 49, 56, 64],
       [27, 83, 71, 85, 61]])

rows = bool[3,] # returns 3rd row for every column
rows
array([ True,  True, False, False, False], dtype=bool)

a[rows]
IndexError                                Traceback (most recent call last)
<ipython-input-24-5a0658ebcfdb> in <module>()
----> 1 a[rows]

IndexError: boolean index did not match indexed array along dimension 0; dimension is 6 but corresponding boolean dimension is 5

1 个答案:

答案 0 :(得分:1)

由于! 2 ' 5 , 2 - 1 . 3 / 1 ; 1 ? 1 \ 1 Counter({' ': 15, 'o': 8, '9': 7, 'n': 6, "'": 5, 'e': 5, 't': 5, '1': 4, 'a': 3, '7': 3, 's': 3, '.': 3, '0': 2, '8': 2, ',': 2, 'm': 2, 'h': 2, '!': 2, ';': 1, 'd': 1, '\\': 1, '5': 1, '/': 1, '6': 1, '-': 1, 'C': 1, 'E': 1, 'r': 1, '?': 1, 'q': 1, 'u': 1, 'i': 1, 'N': 1, 'I': 1}) 中只有5个条目,

rows

由于长度不匹配,它无法索引数组中的In [18]: rows Out[18]: array([ True, True, False, False, False], dtype=bool) 行。

6

当您索引像In [20]: arr.shape Out[20]: (6, 5) In [21]: rows.shape Out[21]: (5,) 这样的数组时,它将被解释为您正在索引到轴0,因为arr[rows]是一维数组。因此,您必须对轴0使用rows,对轴1使用:,如:

rows

另外,请不要将# select all rows but only columns where rows is `True` In [19]: arr[:, rows] Out[19]: array([[73, 20], [18, 66], [27, 83], [78, 74], [26, 18], [41, 16]]) 用作变量名,因为它是内置关键字。这可能会导致代码中的意外行为。