python numpy中nonzero 的用法

2021-08-10 19:07:19 字數 1138 閱讀 2433

當使用布林陣列直接作為下標物件或者元組下標物件中有布林陣列時,都相當於用nonzero()將布林陣列轉換成一組整數陣列,然後使用整數陣列進行下標運算。

nonzeros(a)返回陣列a中值不為零的元素的下標,它的返回值是乙個長度為a.ndim(陣列a的軸數)的元組,元組的每個元素都是乙個整數陣列,其值為非零元素的下標在對應軸上的值。例如對於一維布林陣列b1,nonzero(b1)所得到的是乙個長度為1的元組,它表示b1[0]和b1[2]的值不為0(false)。

>>> b1 = np.array([true, false, true, false]) >>> np.nonzero(b1) (array([0, 2]),) 

對於二維陣列b2,nonzero(b2)所得到的是乙個長度為2的元組。它的第0個元素是陣列a中值不為0的元素的第0軸的下標,第1個元素則是第1軸的下標,因此從下面的結果可知b2[0,0]、b[0,2]和b2[1,0]的值不為0:

>>> b2 = np.array([[true, false, true], [true, false, false]]) >>> np.nonzero(b2) (array([0, 0, 1]), array([0, 2, 0])) 

當布林陣列直接做為下標時,相當於使用由nonzero()轉換之後的元組作為下標物件:

>>> a = np.arange(3*4*5).reshape(3,4,5) >>> a[b2] array([[ 0, 1, 2, 3, 4], [10, 11, 12, 13, 14], [20, 21, 22, 23, 24]]) >>> a[np.nonzero(b2)] array([[ 0, 1, 2, 3, 4], [10, 11, 12, 13, 14], [20, 21, 22, 23, 24]]) 

當下標物件是元組,並且其中有布林陣列時,相當於將布林陣列展開為由nonzeros()轉換之後的各個整數陣列:

>>> a[1:3, b2] array([[20, 22, 25], [40, 42, 45]]) >>> a[1:3, np.nonzero(b2)[0], np.nonzero(b2)[1]] array([[20, 22, 25], [40, 42, 45]]) 

python numpy中nonzero 的用法

當使用布林陣列直接作為下標物件或者元組下標物件中有布林陣列時,都相當於用nonzero 將布林陣列轉換成一組整數陣列,然後使用整數陣列進行下標運算。nonzeros a 返回陣列a中值不為零的元素的下標,它的返回值是乙個長度為a.ndim 陣列a的軸數 的元組,元組的每個元素都是乙個整數陣列,其值為...

python numpy中nonzero 的用法

當使用布林陣列直接作為下標物件或者元組下標物件中有布林陣列時,都相當於用nonzero 將布林陣列轉換成一組整數陣列,然後使用整數陣列進行下標運算。nonzeros a 返回陣列a中值不為零的元素的下標,它的返回值是乙個長度為a.ndim 陣列a的軸數 的元組,元組的每個元素都是乙個整數陣列,其值為...

CSS中設定border屬性為0與none的區別

在我們設定css的時候,對標籤元素不設定邊框屬性或者取消邊框屬性一般設定為 border none 或border 0 兩種方法均可。border none 與border 0 的區別體現有兩點 一是理論上的效能差異 二是瀏覽器相容性的差異。1.效能差異 border 0 把border設為 0 畫...