2011-10-07 64 views
0

我在使numpy.any()在我的问题上正常工作时遇到了一些小问题。 考虑我有一个N×M×M矩阵的3D矩阵,我需要摆脱任何具有所有元素相同的[所有零说]的矩阵MXM。 下面是一个例子来说明我的问题需要对numpy.any进行小小的说明,对于矩阵

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) 

运用follwing结果与我想要什么,但我希望,没有任何回路有更好的方法

for i in range(x.shape[0]): 
     y.append(np.any(x[i,:,:])) 

我在这里的某处犯了错吗? 谢谢!

+1

看起来我正在用文字去挑选,但是你*不能*有一个比(或更少)2维的矩阵。你的问题作为一个关于数组的问题是有效的(它可以有任意的维数)。我写了一篇关于这个的博客文章:http://wilsonericn.wordpress.com/2011/09/15/the-first-thing-you-should -know-大约矩阵/ –

回答

3

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)尺寸,然后将剩余的第二(axis = 1),并且您将获得唯一的一个维度,它最初是第一个维度(axis = 0)。