numpy中實作ndarray數組傳回符合特定條件的索引方法

不言
發布: 2018-04-17 10:46:57
原創
5511 人瀏覽過

以下為大家分享一篇numpy中實作ndarray陣列回傳符合特定條件的索引方法,具有很好的參考價值,希望對大家有幫助。一起過來看看吧

在numpy的ndarray類型中,似乎沒有直接返回特定索引的方法,我只找到了where函數,但是where函數對於尋找某個特定值對應的索引很有用,對於傳回一定區間內值的索引不是很有效,至少我沒有弄清楚應該如何操作尷尬。下面先說一下where函數的用法吧。

(1)where函數的使用場景:

例如現在我產生了一個陣列:

import numpy as np 
arr=np.array([1,1,1,134,45,3,46,45,65,3,23424,234,12,12,3,546,1,2])
登入後複製

現在arr是一個含有18個元素的ndarray型別的數組,後面就用數組來稱呼它吧。假如我想傳回數組中所有元素值為3所對應的索引位置,那麼透過where函數可以很輕鬆地完成。

print np.where(arr==3)
登入後複製

它會傳回一個包含所有值為3對應的索引位置的元組,如下圖:

可以看到在索引為5、9、14的地方所對應的元素值為3。透過這樣的方式可以輕鬆達到目的。但是對於一定變化範圍內的索引這樣就不行了。下面的方法是自己想出來的折衷辦法,比較笨,高手清噴。

(2)透過一個輔助的陣列來解決一定範圍內值索引的尋找

我們建立一個標識元素索引的陣列,然後透過它來顯示符合條件的元素對應的索引。還是剛才的數組,假如我現在要回傳元素值在3到100之間值的索引。我可以產生一個和arr相同大小的數組,然後先透過一次篩選找到大於3的元素對應索引的數組,然後在其中再次篩選,最終得到想要的結果。程式碼如下:

b=np.arange(len(arr))#生成和arr相同长度的数组
登入後複製

c=b[arr>3]#c存放的就是arr中大于3的元素对应的索引 
#最后通过遍历c数组,选择3到100之间的值打印出来 
for i in range(len(c)): 
 if arr[c[i]]<100: 
  print c[i],
登入後複製

下面看一下執行的效果:

可以看到程式將所有介於3和100之間的元素對應的索引值打了出來,如果想同時獲得索引值和相應的元素,只需將上面的“print c[i]”, 替換為“print c[i],arr[c[i]]”即可。

當然這種方法也適用於選擇某個特定值對應的索引,例如我想找到所有3對應的位置,可以用print b[arr==3]即可印出所有值為3的元素所對應的索引。其實不論怎麼做,都是用到了數組進行關係運算後產生布林數組,然後讓數組中為True的地方進行顯示。

當然還可以透過兩次進行篩選,分別篩選出大於3的元素和小於100的元素對應的索引數組,然後兩個數組做交集處理,在numpy中有一個intersect1d函數可以進行這樣的運算,但還是麻煩。目前只能想到這些辦法,不知道哪位高手有更好的方法,歡迎大家一起交流一下。

相關推薦:

相關推薦:

python3庫numpy數組屬性的檢視方法

在python中numpy與array應該怎樣轉換


##########################

以上是numpy中實作ndarray數組傳回符合特定條件的索引方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板