2016-04-15 22 views
0

我有一个非常奇怪的问题,numpy.nonzero()。它对于不是1或-1的值表现良好,但对于这两个值,似乎会产生奇怪的结果。Numpy.nonzero对于值为1或-1的行为很奇怪

例如,

goalmat = np.matrix([[2, 0, 1], [-1, 0, -1]]) 

使得

matrix([[ 2, 0, 1], 
     [-1, 0, -1]]) 

现在,使用numpy.nonzero(goalmat == x)的只能部分:

>>> np.nonzero(goalmat == 1) 
(matrix([[0]]), matrix([[2]])) 
>>> np.nonzero(goalmat == -1) 
(matrix([[1, 1]]), matrix([[0, 2]])) 

而且

>>> goalmat = np.matrix([[2, 2, 1], [-1, 1, -1]]) 
>>> goalmat 
matrix([[ 2, 2, 1], 
     [-1, 1, -1]]) 
>>> np.nonzero(goalmat == 1) 
(matrix([[0, 1]]), matrix([[2, 1]])) 
>>> np.nonzero(goalmat == -1) 
(matrix([[1, 1]]), matrix([[0, 2]])) 

所以它似乎给1的正确位置,如果我要求-1 ...

我误用/误解numpy.nonzero()?

+3

这看起来像正确的输出,我...对于每一个真正的位置,你有指数为0轴矩阵和指数的对轴1 –

+0

矩阵你是对的> ___ <我会编辑我的问题,必须找到正确的数据。 –

+0

对不起,我只是从shell中错误的测试运行,你是完全正确的。我用真正奇怪的结果解决了这个问题,至少我觉得他们很奇怪:) –

回答

0

它确实工作正常,您实际上没有使用值为-1的nonzero(),但True和False是语句goalmat == -1的输出。 您可以检查nonzero()结果是:

>>> index1, index2 = np.nonzero(goalmat == -1) 
>>> goalmat[index1, index2] 
matrix([[-1, -1]])