Python快速過濾Numpy陣列中特定元素的方法

2021-07-05 09:48:11 字數 1468 閱讀 3766

對於乙個numpy陣列,有的時候我們想選取或者剔除某些符合條件的元素值,卻突然發現除了一些特定的函式,如numpy.minimum()等,或者乙個巢狀迴圈之外束手無策。其實這裡有乙個trick1,可以使**有效而簡潔。

讓我們來到乙個場景中:我們有乙個名為saliency的灰度影象陣列,用來表示一張中受關注程度的不同。為了增強視覺化效果,我們需要過濾掉陣列中數值過小的元素,讓其等於0,於是我們可以這麼做:

>>> 

print saliency.shape

(227,227)

>>> idx = saliency < 0.0001

# or some other threshold value

>>> saliency[idx] = 0

# other operations ...

簡單寫,可以寫作

>>> saliency[saliency < 0.0001] = 0

# other operations ...

我們來看看saliency < 0.0001到底生成了什麼:

>>> 

print saliency < 0.0001

[[ true

true

true ..., true

true

true]

[ true

true

true ..., true

true

true]

[ true

true

true ..., true

true

true]

...,

[ true

true

true ..., true

true

true]

[ true

true

true ..., true

true

true]

[ true

true

true ..., true

true

true]]

是乙個邏輯陣列。

>>> 

print img.shape

(227,227,3)

>>> img[img > 200, 0] = 200

可能有人會想到,能否用這個trick來處理諸如 saliency > 0.0001 & saliency < 0.001的元素。我試了一下,這個技巧繼續外推:

# note that brackets are necessary!

saliency[(saliency>0.0001)&(saliency<0.001)] = 0

需要注意的是,list型別的變數並不支援上面所說的技巧。

Python知識快速過濾 一

最新的版本 python 3.x後的版本安裝可以直接配置環境變數,無須手動配置 linux下xshell配置 path path user local python3 bin python3 windows下 命令列 set path path location 安裝之後,可以再shell中執行py...

Python知識快速過濾 二

一 number型別 複數型別complex 包含real和imag兩個屬性 內建方法 abs x 返回數值的絕對值,x可以為int,float,bool和complex,其他型別的資料會報錯 pow x,y z 相當於math.pow x,y z round x,b 奇進偶棄存在精度問題,盡量不要...

NumPy快速入門

python 2.7 ipython 4.1.2 in 1 from numpy import in 2 yuanzu 4,5,6 in 3 ll array yuanzu in 4 ll out 4 array 4,5,6 in 5 pylist 0,1,2 in 6 jj array pylis...