代码:
import numpy as np
a = np.arange(5)
print(a[True])
print(a[False])
结果:
[[0 1 2 3 4]]
[]
对于上面的代码,当我将True传递给numpy数组的索引时,它将返回完整数组,而对于False,则返回一个空数组。背景情况如何?
答案 0 :(得分:3)
您的示例-将标量或0D应用于布尔数组到一维数组中
print(a[True])
# [[0 1 2 3 4]]
print(a[False])
# []
为清楚起见,尤其是w.r.t.第二种(False
)情况让我们查询形状
print(a[True].shape)
# (1, 5)
print(a[False].shape)
# (0, 5)
现在乍一看,这有点令人困惑。为什么要增加尺寸?
让我们从一个不太前卫的案例开始,弄清楚为什么这是逻辑行为:
x = np.arange(6).reshape(3,2)
m2 = np.array([[True,False],[True,True],[False,True]])
m1 = np.array([True,False,True])
m0 = np.array(True)
我们创建了2D数组并匹配2D,1D和0D蒙版。
使用2D蒙版进行遮罩可得到1D结果
x[m2]
# array([0, 2, 3, 5])
使用1D遮罩进行掩膜可以选择整行,从而获得2D结果
x[m1]
# array([[0, 1],
# [4, 5]])
我们也可以在更高的维度上进行验证,即从蒙版中删除一个尺寸会为结果添加一个尺寸。
因此,逻辑上来说,我们使用0D进行遮罩确实比开始时获得了更多的一维。 2D遮罩选择单个点(0D->那些列表:1D),一维遮罩选择整个行(1D->那些列表:2D);因此,0D遮罩应该并且确实会选择整张图纸(2D->这些图纸的列表:3D);因为基本数组是2D的,所以整个都是一张纸。
x[m0]
# array([[[0, 1],
# [2, 3],
# [4, 5]]])
x[m0].ndim
# 3
通常:
x[m2].ndim == x.ndim - m2.ndim + 1
# True
x[m1].ndim == x.ndim - m1.ndim + 1
# True
x[m0].ndim == x.ndim - m0.ndim + 1
# True
答案 1 :(得分:0)
a是您的numpy数组,即您想放置条件的[0,1,2,3,4] 如果满足条件,则返回索引,如果满足则返回该元素 然后不要丢弃那些元素。在这里,您输入的是“真”,这意味着 每个元素都满足此条件,如果 假,然后满足所有条件。检查此部分