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 มีวิธีที่ดีที่จะแก้ปัญหานี้

เราสามารถแทนที่ตัวแบบค่าเดี่ยวในเงื่อนไขด้เลย และมันจะทำงานตามที่เราคาดหวัง

ตัวอย่าง

สร้างตัวตรวจค้นตัวแบบค่าเดี่ยวที่มีเพียงเลขที่มากกว่า 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)

ปฏิบัติตัวอย่าง