Numpy模組之nonzero函式

2021-09-27 17:00:20 字數 1828 閱讀 1759

nonzero函式的基本功能是返回乙個元組,這個元組的元素個數等於陣列的維度,而每個元組元素對應非零元素的乙個維度,元組從左到右依次是axis=0,axis=1,axis=3…對應的非零元素的索引。

eg:

import numpy as np

x = np.array([[

2,3,

4,0]

,[2,

0,1,

2],[

1,1,

7,2]

])print

(type

(np.nonzero(x)))

輸出結果:

<

class

'tuple'

>

#是元組型別

print

(np.nonzero(x)

)#返回陣列,或print(x.nonzero())

(array([0

,0,0

,1,1

,1,2

,2,2

,2], dtype=int32)

, array([0

,1,2

,0,2

,3,0

,1,2

,3], dtype=int32)

)print

(len

(np.nonzero(x)[0

]))#返回非0元素個數,或print(len(x.nonzero()[0]))

輸出結果:

10print

(np.nonzero(x)[0

])輸出結果:[0

0011

1222

2]#即元組第乙個元素,也即非零元素第乙個維度對應的索引

print

(np.nonzero(x)[2

])輸出結果:

indexerror:

tuple index out of range

#只有2個維度對應的索引組成的陣列,索引只到1

print

(x[np.nonzero(x)])

#或print(x[x.nonzero()]),返回對應非零元素,即剛才的陣列在這裡充當切片

輸出結果:[2

3421

2117

2]

陣列過濾,nonzero的這種用法比較特殊,似乎和0元素沒有關係,但是這裡的索引是bool值,可利用這個原理進行陣列過濾,篩選某一列或行符合條件的行或列

print

(x[np.nonzero(x[:,

2]>3)

])#或print(x[(x[:,2]>3).nonzero()])

輸出結果:[[

2340

][11

72]]

順便提一下len()內建函式的特殊性,在以上例子中,基本都有兩種寫法,因為nonzero是numpy模組的普通方法,普通方法一般都有兩種寫法,即x.method()或package/module.method(x),而len()函式背後是特殊方法__lenth__被python直譯器呼叫的,並非給我們呼叫,並且是通過cpython走的捷徑,是沒有x.len()這種語法的,特殊方法如果想強制按方法型別呼叫,可以按照__method__寫法,但這樣對於常見的內建函式來說,效率是低的,所以不建議內建函式按此方式呼叫,具體可見《流暢的python》。

x =

'ddxcc'

print

(x.__len__())

輸出結果:

5print

(len

(x))

輸出結果:

5

numpy之隨機數模組 random模組

一 二項分布 隨機數 模組為random模組 生成服從特定統計規律的隨機數序列 1.二項分布 binomial 就是重複n次的伯努利實驗,每次實驗只有兩種可能的結果,而且兩種結果發生與否相互獨立。事件發生與否的概率在每次實驗中都是保持不變的 numpy中實現 np.random.binomial n...

python系列之numpy模組學習

未完待續 1.nupmy是什麼?numpy是python中用於科學計算的乙個庫。import numpy as np 匯入numpy並命名為np print np.version.version 輸出numpy的版本 print np.version 也可以這樣輸出版本 結果如圖 2.建立陣列 ar...

Python的numpy模組之zeros

使用 import numpy as np np.zeros 陣列形狀 dtype,older 返回 乙個指定形狀的陣列,其元素為0的指定type 引數 陣列形狀 5,5,5 dtype float int older c表示行優先,f表示列優先 可選引數 例子 np.zeros 2 array 0...