国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

numpy中實(shí)現(xiàn)ndarray數(shù)組返回符合特定條件的索引方法

2020-02-22 23:41:07
字體:
供稿:網(wǎng)友

在numpy的ndarray類型中,似乎沒有直接返回特定索引的方法,我只找到了where函數(shù),但是where函數(shù)對(duì)于尋找某個(gè)特定值對(duì)應(yīng)的索引很有用,對(duì)于返回一定區(qū)間內(nèi)值的索引不是很有效,至少我沒有弄明白應(yīng)該如何操作尷尬。下面先說一下where函數(shù)的用法吧。

(1)where函數(shù)的使用場(chǎng)景:

例如現(xiàn)在我生成了一個(gè)數(shù)組:

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]) 

現(xiàn)在arr是一個(gè)含有18個(gè)元素的ndarray類型的數(shù)組,后面就用數(shù)組來稱呼它吧。假如我想返回?cái)?shù)組中所有元素值為3所對(duì)應(yīng)的索引位置,那么通過where函數(shù)可以很輕松地完成。

print np.where(arr==3) 

它會(huì)返回一個(gè)包含所有值為3對(duì)應(yīng)的索引位置的元組,如下圖:

可以看到在索引為5、9、14的地方所對(duì)應(yīng)的元素值為3。通過這樣的方式可以輕松達(dá)到目的。但是對(duì)于一定變化范圍內(nèi)的索引這樣就不行了。下面的方法是自己想出來的折衷辦法,比較笨,高手清噴。

(2)通過一個(gè)輔助的數(shù)組來解決一定范圍內(nèi)值索引的查找

我們建一個(gè)標(biāo)識(shí)元素索引的數(shù)組,然后通過它來顯示符合條件的元素對(duì)應(yīng)的索引。還是剛才的數(shù)組,假如我現(xiàn)在要返回元素值在3到100之間值的索引。我可以生成一個(gè)和arr相同大小的數(shù)組,然后首先通過一次篩選找到大于3的元素對(duì)應(yīng)索引的數(shù)組,繼而在其中再次篩選,最終得到想要的結(jié)果。代碼如下:

b=np.arange(len(arr))#生成和arr相同長(zhǎng)度的數(shù)組 
c=b[arr>3]#c存放的就是arr中大于3的元素對(duì)應(yīng)的索引 #最后通過遍歷c數(shù)組,選擇3到100之間的值打印出來 for i in range(len(c)):  if arr[c[i]]<100:   print c[i], 

下面看一下執(zhí)行的效果:

可以看到程序?qū)⑺薪橛?和100之間的元素對(duì)應(yīng)的索引值打了出來,如果想同時(shí)獲得索引值和相應(yīng)的元素,只需將上面的“print c[i]”, 替換為 “print c[i],arr[c[i]]”即可。

當(dāng)然這種方法也適用于選擇某個(gè)特定值對(duì)應(yīng)的索引,例如我想找到所有3對(duì)應(yīng)的位置,可以用print b[arr==3]即可打印出所有值為3的元素所對(duì)應(yīng)的索引。其實(shí)不論怎么做,都是用到了數(shù)組進(jìn)行關(guān)系運(yùn)算后生成布爾數(shù)組,然后讓數(shù)組中為True的地方進(jìn)行顯示。

當(dāng)然還可以通過兩次進(jìn)行篩選,分別篩選出大于3的元素和小于100的元素對(duì)應(yīng)的索引數(shù)組,然后兩個(gè)數(shù)組做交集處理,在numpy中有一個(gè)intersect1d函數(shù)可以進(jìn)行這樣的運(yùn)算,但是仍然麻煩。目前只能想到這些辦法,不知道有哪位高手有更好的方法,歡迎大家一起交流一下。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 合江县| 郓城县| 偏关县| 页游| 遂昌县| 谷城县| 中方县| 漳浦县| 连云港市| 隆德县| 得荣县| 南乐县| 繁峙县| 台中市| 正安县| 修水县| 绿春县| 克什克腾旗| 泰顺县| 阆中市| 葵青区| 双鸭山市| 南昌县| 海安县| 沂源县| 亳州市| 郎溪县| 航空| 年辖:市辖区| 从江县| 合江县| 河津市| 伊吾县| 兴城市| 洛扎县| 和林格尔县| 万盛区| 获嘉县| 天柱县| 齐齐哈尔市| 万年县|