Python Numpy.all()忽略索引器

Python Numpy.all()忽略索引器,python,numpy,Python,Numpy,假设我们有以下数组: a = np.zeros((3,3,3)) 单一支票有效: a[1,1,1]==0-->True a[5,1,1]==0-->索引器 检查数组的某个区域不会显示索引器 (a[0:2,0:2,0:2]==0)。all()-->True (a[0:20,0:2,0:2]==0)。all()-->结果为True,但应为索引器 在这种情况下,我希望得到一个False,或者至少是错误,有什么提示吗?默认情况下,对于numpy数组,如果索引大于维度,那么它将返回,直到找到最后一个元素

假设我们有以下数组:

a = np.zeros((3,3,3))
单一支票有效:

a[1,1,1]==0
-->True

a[5,1,1]==0
-->索引器

检查数组的某个区域不会显示索引器

(a[0:2,0:2,0:2]==0)。all()
-->True

(a[0:20,0:2,0:2]==0)。all()
-->结果为True,但应为索引器


在这种情况下,我希望得到一个False,或者至少是错误,有什么提示吗?

默认情况下,对于numpy数组,如果索引大于维度,那么它将返回,直到找到最后一个元素


我不确定你是否能改变这种行为。我能想到的唯一解决方案是首先检查索引是否小于每个维度的大小,然后进行比较。

我建议事先检查数组的边界。但是,如果您确实想这样做,一种方法是在数组中填充一个比较结果不等于所有数字的值,例如
None

a = np.zeros((3, 3))
padded = np.pad(a.astype(object), [(0, 1), (0, 1)], 'constant', constant_values=None)

print((a[:3, :3] == 0).all())
print((a[:4, :4] == 0).all())

print((padded[:3, :3] == 0).all())
print((padded[:4, :4] == 0).all())
输出:

True
True
True
False

请注意,这需要将数组转换为
对象
类型。

类似
A[0:20,0:2,0:2]
的切片不会产生索引错误,例如:
np.array([1,2,3])[0:20]
->
np.array([1,2,3])
p.S.:目前,我用一些if语句处理这个问题,但在这样的情况下,也许有一种方法可以把假象扔掉,嗯?当索引超过数组末尾时,Numpy会给出一个
索引器
。这是一个错误:
np.array([1,2,3])[3]
My bad,我的意思是如果你对它进行切片,这与普通列表切片的工作方式是一致的<代码>[1,2,3][1:10]
不报告错误。