0Pricing
Pandas & NumPy Academy · บทเรียน

การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น

กรองอาร์เรย์ด้วยเงื่อนไขบูลีน และเลือกสมาชิกที่กำหนดเองด้วยอาร์เรย์ดัชนีจำนวนเต็ม

การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

อาร์เรย์บูลีนในฐานะมาสก์

มาสก์บูลีน คืออาร์เรย์ที่มีค่า True/False ใช้มาสก์เป็น index แล้วคุณจะเหลือเฉพาะสมาชิกที่มีค่า True ซึ่งเป็นเครื่องมือหลักสำหรับการกรองข้อมูล

import numpy as np

a = np.array([5, 3, 8, 1, 9, 2, 7])
mask = a > 4
print(mask)       # [ True False  True False  True False  True]
print(a[mask])    # [5 8 9 7]

เงื่อนไขบูลีนแบบผสม

สร้างตัวกรองแบบผสมด้วย & (และ), | (หรือ) และ ~ (ไม่) ควรใส่แต่ละเงื่อนไขไว้ใน วงเล็บเสมอ ไม่เช่นนั้นลำดับการคำนวณอาจทำให้เกิดความสับสน

import numpy as np

a = np.array([3, 7, 2, 9, 1, 6, 4, 8])

# Elements between 4 and 8 inclusive
result = a[(a >= 4) & (a <= 8)]
print(result)   # [7 6 4 8]

# Elements less than 3 or greater than 7
result2 = a[(a < 3) | (a > 7)]
print(result2)  # [2 9 1 8]

การแก้ไขค่าด้วยการทำดัชนีแบบบูลีน

คุณสามารถกำหนดค่าให้กับส่วนที่เลือกด้วยบูลีนได้โดยตรง ซึ่งจะเปลี่ยนเฉพาะสมาชิกที่ตรงตามเงื่อนไขในตำแหน่งเดิม วิธีนี้เป็นวิธีที่รวดเร็วที่สุดในการจำกัดค่าผิดปกติหรือเติมค่าที่หายไป

import numpy as np

a = np.array([5, -3, 8, -1, 2, -7])
a[a < 0] = 0    # zero out negatives in-place
print(a)        # [5 0 8 0 2 0]

# Cap values above 6
a[a > 6] = 6
print(a)        # [5 0 6 0 2 0]

การใช้มาสก์บูลีนกับอาร์เรย์ 2 มิติ

มาสก์บูลีนบนอาร์เรย์ 2 มิติจะคืนค่าเป็น ผลลัพธ์ 1 มิติ แบบแบนเสมอ หากต้องการเลือกทั้งแถว ให้สร้างมาสก์ 1 มิติจากคอลัมน์หนึ่ง แล้วทำดัชนีตาม axis 0

import numpy as np

m = np.array([[1, 5], [3, 2], [8, 4], [6, 7]])
# Select rows where first column > 4
mask = m[:, 0] > 4
print(mask)     # [False False  True  True]
print(m[mask])  # [[8 4] [6 7]]

np.where กับมาสก์

np.where(condition, x, y) จะคงรูปทรงของอาร์เรย์ไว้ โดยเลือก x เมื่อเงื่อนไขเป็นจริง และเลือก y ในกรณีอื่น เหมาะอย่างยิ่งสำหรับสลับค่าโดยไม่ทำให้อาร์เรย์แบน

import numpy as np

a = np.array([3, -1, 5, -2, 4])
result = np.where(a >= 0, a, 0)  # keep positives, replace negatives
print(result)  # [3 0 5 0 4]

# Recode: above-average -> 'high', else -> 'low'
labels = np.where(a >= a.mean(), 'high', 'low')
print(labels)  # ['high' 'low' 'high' 'low' 'high']

พื้นฐานการทำดัชนีแบบพิเศษ

การทำดัชนีแบบพิเศษ หมายถึงการส่งอาร์เรย์ของดัชนีจำนวนเต็มเพื่อดึงสมาชิกที่ต้องการ โดยเลือกได้ทุกลำดับและเลือกซ้ำได้ ผลลัพธ์จะเป็นสำเนาเสมอ

import numpy as np

a = np.array([10, 20, 30, 40, 50])
idx = np.array([4, 1, 1, 3])
print(a[idx])   # [50 20 20 40]

# 2D index shape -> 2D output
idx2d = np.array([[0, 2], [4, 1]])
print(a[idx2d])  # [[10 30] [50 20]]

การทำดัชนีแบบพิเศษกับอาร์เรย์ 2 มิติ

สำหรับอาร์เรย์ 2 มิติ อาร์เรย์ดัชนีที่จับคู่กันจะเลือกจุดที่กระจายอยู่: m[rows, cols] จะดึงสมาชิกตามคู่ (แถว, คอลัมน์) แต่ละคู่ ไม่ใช่เมทริกซ์ย่อยทั้งก้อน

import numpy as np

m = np.array([[1,  2,  3],
              [4,  5,  6],
              [7,  8,  9]])

# Select elements at (0,2), (1,0), (2,1)
rows = [0, 1, 2]
cols = [2, 0, 1]
print(m[rows, cols])  # [3 4 8]

np.ix_ สำหรับการเลือกตารางแถวและคอลัมน์

np.ix_ เลือกเมทริกซ์ย่อยจากทุกชุดผสมของแถวและคอลัมน์ที่คุณระบุ เหมาะเมื่อคุณต้องการเลือกหลายแถวและหลายคอลัมน์ ไม่ใช่เพียงคู่ตำแหน่ง

import numpy as np

m = np.arange(16).reshape(4, 4)
print(m)

# Select rows 0,2 and columns 1,3
ix = np.ix_([0, 2], [1, 3])
print(m[ix])
# [[ 1  3]
#  [ 9 11]]

np.nonzero() และ np.argwhere()

np.nonzero จะคืนค่าดัชนีของสมาชิกที่ไม่ใช่ศูนย์หรือเป็น True ในรูปทูเพิลแยกตามแกน ส่วน np.argwhere ให้ข้อมูลเดียวกันในรูปแถวที่อ่านได้ง่าย

import numpy as np

a = np.array([0, 3, 0, 5, 0, 7])
print(np.nonzero(a))       # (array([1, 3, 5]),)
print(np.argwhere(a > 0))  # [[1] [3] [5]]

การใช้การทำดัชนีแบบบูลีนและแบบพิเศษร่วมกัน

ใช้ทั้งสองแบบร่วมกันได้: ใช้มาสก์บูลีนกรองแถวก่อน แล้วใช้การทำดัชนีแบบพิเศษเพื่อจัดลำดับคอลัมน์ใหม่ ทั้งสองอย่างช่วยกรองและจัดเรียงข้อมูลได้ในขั้นตอนเดียวอย่างเป็นระเบียบ

import numpy as np

data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])
scores = np.array([0.9, 0.3, 0.8])

# Keep high-scoring rows, reorder columns to [2, 0, 1]
high = data[scores > 0.5]
reordered = high[:, [2, 0, 1]]
print(reordered)

ประสิทธิภาพ: การทำดัชนีแบบบูลีนเทียบกับแบบพิเศษ

ทั้งการทำดัชนีแบบบูลีนและแบบพิเศษจะคืนค่าสำเนา สำหรับการกรองข้อมูล มาสก์บูลีน มักอ่านเข้าใจง่ายที่สุดและทำงานได้รวดเร็วเพียงพอ จึงเป็นตัวเลือกเริ่มต้นที่ดี

import numpy as np

a = np.random.rand(1_000_000)

# Boolean mask -- readable and fast
result = a[a > 0.5]
print('filtered size:', result.size)  # ~500000

# Equivalent with np.where + fancy index
idx = np.where(a > 0.5)[0]
result2 = a[idx]
print('same result:', np.array_equal(result, result2))

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับมาสก์บูลีนและการทำดัชนีแบบพิเศษจากบทเรียนนี้

สรุปบทเรียน

ทำได้ดีมาก! มาสก์บูลีนช่วย กรองและคัดลอกข้อมูล np.where คงรูปทรงของอาร์เรย์ไว้ และการทำดัชนีแบบพิเศษช่วยดึงสมาชิกใด ๆ ที่คุณระบุได้ บทถัดไป: Pandas Series!

คำถามที่พบบ่อย

บทเรียน “การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น”

กรองอาร์เรย์ด้วยเงื่อนไขบูลีน และเลือกสมาชิกที่กำหนดเองด้วยอาร์เรย์ดัชนีจำนวนเต็ม คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม

ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ฟังก์ชันสากล (ufuncs)
  2. ฟังก์ชันการรวมค่า
  3. กฎการกระจายค่า
  4. การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น
← กลับไปที่ Pandas & NumPy Academy