关于numpy数组索引中布尔标量的文档[重复]

lxkprmvk  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(123)

此问题在此处已有答案

What does x[False] do in numpy?(1个答案)
4天前关闭。
NumPy的array indexing文档似乎没有提到x[True]x[False]类型的数组索引。
根据经验,使用True插入大小为1的新维度,而使用False插入大小为0的新维度。
x[True, True]的行为只插入一个大小为1的新轴,而不是两个。
这种行为与布尔索引不一致,也与将布尔标量视为整数不一致。
寻找观察到的行为的解释,并希望一个合理的。非常感谢!

xtfmy6hx

xtfmy6hx1#

在主索引文档页面上有一个部分
https://numpy.org/doc/stable/user/basics.indexing.html#boolean-array-indexing
如上所述,索引阵列应匹配索引阵列的形状或其轴中的一个。
我不认为布尔标量索引有文档记载,或者至少我不知道有这样的页面。我怀疑你看到的行为是历史特征没有被清理的结果。

In [137]: x=np.arange(4)

使用形状匹配的“遮罩”进行正确分度:

In [138]: x[np.array([True,False,False,True])]
Out[138]: array([0, 3])

不完整的掩码会引发错误:

In [139]: x[np.array([True,False,False])]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In[139], line 1
----> 1 x[np.array([True,False,False])]
        x = array([0, 1, 2, 3])
        np = <module 'numpy' from 'C:\\Users\\paul\\miniconda3\\lib\\site-packages\\numpy\\__init__.py'>

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

我想这通常会返回一个带有警告的结果。
您观察到的是布尔标量添加了一个大小为1或0的维:

In [140]: x[True].shape
Out[140]: (1, 4)
In [141]: x[False].shape
Out[141]: (0, 4)
In [142]: x[:,False].shape
Out[142]: (4, 0)

它显然忽略了多个标量。
我本来想说[True]看起来像[np.newaxis](又名[None]),但结果strides更像reshape产生的东西。
我认为这是一个遗留行为,而不是你应该指望使用的东西。
索引文档注解中的重复引用:
布尔数组的非零等价不适用于零维布尔数组。

相关问题