numpy.any需要对矩阵进行小的澄清

时间:2011-10-07 07:57:33

标签: python numpy

我在让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,:,:]))

我在某处犯了错误吗? 谢谢!

1 个答案:

答案 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)。