numpy ndarray 按條件篩選數組,關聯篩選


轉:http://http://blog.csdn.net/blackyuanc 作者:y小川 https://blog.csdn.net/blackyuanc/article/details/77948703

最近的項目中大量涉及數據的預處理工作,對於ndarray的使用非常頻繁。其中ndarray如何進行數值篩選,總結了幾種方法。

1.按某些固定值篩選 
如下面這段代碼從,ndarray中可以篩選出數值等於3的子數組和其在原數組中的索引位置。

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]) print(np.where(arr==3)) print(arr[np.where(arr == 3)]) Output: (array([ 5, 9, 14], dtype=int32),) [3 3 3]

2.按多個固定值篩選 
按上述方法篩選多個固定值也是可行的,將不同條件用括號括起來,之間打 | 即可

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]) print(np.where((arr == 3) | (arr == 1))) print(arr[np.where((arr == 3) | (arr == 1))]) Output: (array([ 0, 1, 2, 5, 9, 14, 16], dtype=int32),) [1 1 1 3 3 3 1]

 

3.按范圍篩選 
除了按固定值,我們還可以按一定的范圍進行篩選

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]) print(np.where(arr > 3)) print(arr[np.where(arr > 3)]) Output: (array([ 3, 4, 6, 7, 8, 10, 11, 12, 13, 15], dtype=int32),) [ 134 45 46 45 65 23424 234 12 12 546]

 

如果不需要index,還可以有更快的方法

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]) print(arr[arr > 3]) Output: [ 134 45 46 45 65 23424 234 12 12 546]

 

那為什么還需要用np.where呢?因為索引可以滿足不同數組間的篩選,比如有a, b 兩個數組我們需要篩選出所有a == 0的b時即可使用np.where函數。

import numpy as np a = np.array([0, 0, 1, 1, 0, 1, 1, 0, 1]) b = np.arange(len(a)) print(a) print(b) print(b[np.where(a == 0)]) Output: [0 0 1 1 0 1 1 0 1] [0 1 2 3 4 5 6 7 8] [0 1 4 7]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM