我在让numpy.any()在我的问题上正常工作时遇到了一些问题。 考虑我有一个N X M X M矩阵的3D矩阵,我需要摆脱任何矩阵MXM,它的所有元素都相同[全部为零]。 这是一个说明我的问题的例子
x = np.arange(250).reshape(10,5,5)
x[0,:,:] = 0
我需要做的是摆脱第一个5X5矩阵,因为它包含全零。 所以我尝试了
np.any(x,axis=0)
预计会有
的结果[FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE]
但我得到的是
array([[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True]
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True],
[ True, True, True, True, True]], dtype=bool)
将结果应用于我想要的但我希望没有任何循环有更好的方法
for i in range(x.shape[0]):
y.append(np.any(x[i,:,:]))
我在某处犯了错误吗? 谢谢!
答案 0 :(得分:4)
在带有x[0,:,:] = 0
的10x5x5矩阵中,我希望得到以下结果:
[False, True, True, True, True, True, True, True, True, True]
因为它是十个 5x5数组中的第一个,它全部为零而不是五。
您使用
获得此结果x.any(axis=1).any(axis=1)
或
x.any(axis=2).any(axis=1)
这意味着你首先消除第二个(轴= 1)或第三个(asix = 2)维度,然后是剩下的第二个(轴= 1),你得到唯一的一个维度,它最初是第一个维度(轴= 0)。