1. 程式人生 > 實用技巧 >NumPy 陣列過濾

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。

建立過濾器陣列

在上例中,我們對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)