1. 程式人生 > >Numpy.nonzero() 詳解 numpy module中 nonzero()函式

Numpy.nonzero() 詳解 numpy module中 nonzero()函式

最近看到《機器學習實戰》第6章PlattSMO演算法時, 遇到了numpy.nonzero()函式, 糾結了很久才看懂用法。

簡記之,共以後自己和他人蔘考。

numpy.nonzero(a)[source]

Return the indices of the elements that are non-zero.

Returns a tuple of arrays, one for each dimension of a, containing the indices of the non-zero elements in that dimension. The corresponding non-zero values can be obtained with:

a[nonzero(a)]

To group the indices by element, rather than dimension, use:

transpose(nonzero(a))

The result of this is always a 2-D array, with a row for each non-zero element.

Parameters:

a : array_like

Input array.

Returns:

tuple_of_arrays : tuple

Indices of elements that are non-zero.


簡單翻譯:

numpy函式返回非零元素的目錄。

返回值為元組, 兩個值分別為兩個維度, 包含了相應維度上非零元素的目錄值。   可以通過a[nonzero(a)]來獲得所有非零值。

個人解釋,  nonzero(a)  將對矩陣a的所有非零元素, 分別安裝兩個維度, 一次返回其在各維度上的目錄值。

如果 a=mat([ [1,0,0],                          

             [0,0,0],

             [0,0,0]])                      

 則 nonzero(a) 返回值為 (array([0]), array([0]))   , 因為矩陣a只有一個非零值, 在第0行, 第0列。

如果 a=mat([ [1,0,0],                          

             [1,0,0],

             [0,0,0]])                      

 則 nonzero(a) 返回值為 (array([0, 1]), array([0, 0]))   , 因為矩陣a只有兩個非零值, 在第0行、第0列,和第1行、第0列。所以結果元組中,第一個行維度資料為(0,1) 元組第二個列維度都為(0,0)。