2016-04-15 24 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]])