NumPy 過濾陣列
過濾陣列
從現有陣列中提取一些元素並建立一個新陣列的過程稱為過濾。
在 NumPy 中,您可以使用布林索引列表過濾陣列。
布林索引列表是一個布林值列表,對應於陣列中的索引。
如果某個索引處的值為True
,則該元素包含在過濾後的陣列中;如果該索引處的值為False
,則該元素將從過濾後的陣列中排除。
示例
從索引 0 和 2 的元素建立陣列
import numpy as np
arr = np.array([41, 42, 43, 44])
x = [True, False, True, False]
newarr = arr[x]
print(newarr)
自己動手試一試 »
上面的示例將返回[41, 43]
,為什麼?
因為新陣列只包含過濾器陣列中值為True
的那些值,在本例中是索引 0 和 2。
建立過濾陣列
在上面的示例中,我們硬編碼了True
和False
值,但常見的用法是根據條件建立過濾陣列。
示例
建立一個過濾陣列,只返回大於 42 的值
import numpy as np
arr = np.array([41, 42, 43, 44])
# 建立一個空列表
filter_arr = []
# 遍歷 arr 中的每個元素
for element in arr
# 如果元素大於 42,則將值設定為 True,否則設定為 False
if element > 42
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 提供了一種很好的方法來解決它。
我們可以直接用陣列代替條件中的可迭代變數,它會像我們期望的那樣工作。
示例
建立一個過濾陣列,只返回大於 42 的值
import numpy as np
arr = np.array([41, 42, 43, 44])
filter_arr = arr > 42
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)
自己動手試一試 »