NumPy 陣列過濾
阿新 • • 發佈:2020-08-20
陣列過濾
從現有陣列中取出一些元素並從中建立新陣列稱為過濾(filtering)。
在 NumPy 中,我們使用布林索引列表來過濾陣列。
布林索引列表是與陣列中的索引相對應的布林值列表。
如果索引處的值為True,則該元素包含在過濾後的陣列中;如果索引處的值為False,則該元素將從過濾後的陣列中排除。
例項
用索引 0 和 2、4 上的元素建立一個數組:
import numpy as np arr = np.array([61, 62, 63, 64, 65]) x = [True, False, True, False, True] newarr = arr[x] print(newarr)
上例將返回[61, 63, 65],為什麼?
因為新過濾器僅包含過濾器陣列有值True的值,所以在這種情況下,索引為 0 和 2、4。
建立過濾器陣列
在上例中,我們對True和False值進行了硬編碼,但通常的用途是根據條件建立過濾器陣列。
例項
建立一個僅返回大於 62 的值的過濾器陣列:
import numpy as np
arr = np.array([61, 62, 63, 64, 65])
# 建立一個空列表
filter_arr = []
# 遍歷 arr 中的每個元素
for element in arr:
# 如果元素大於 62,則將值設定為 True,否則為 False:
if element > 62:
filter_arr.append(True)
else:
filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)
例項
建立一個過濾器陣列,該陣列僅返回原始陣列中的偶數元素:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7])
# 建立一個空列表
filter_arr = []
# 遍歷 arr 中的每個元素
for element in arr:
# 如果元素可以被 2 整除,則將值設定為 True,否則設定為 False
if element % 2 == 0:
filter_arr.append(True)
else:
filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)
直接從陣列建立過濾器
上例是 NumPy 中非常常見的任務,NumPy 提供瞭解決該問題的好方法。
我們可以在條件中直接替換陣列而不是 iterable 變數,它會如我們期望地那樣工作。
例項
建立一個僅返回大於 62 的值的過濾器陣列:
import numpy as np arr = np.array([61, 62, 63, 64, 65]) filter_arr = arr > 62 newarr = arr[filter_arr] print(filter_arr) print(newarr)
例項
建立一個過濾器陣列,該陣列僅返回原始陣列中的偶數元素:
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7]) filter_arr = arr % 2 == 0 newarr = arr[filter_arr] print(filter_arr) print(newarr)