NumPy 數組過濾

數組過濾

從現有數組中取出一些元素并從中創建新數組稱為過濾(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。

創建過濾器數組

在上例中,我們對 TrueFalse 值進行了硬編碼,但通常的用途是根據條件創建過濾器數組。

實例

創建一個僅返回大于 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)

運行實例