การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น
กรองอาร์เรย์ด้วยเงื่อนไขบูลีน และเลือกสมาชิกที่กำหนดเองด้วยอาร์เรย์ดัชนีจำนวนเต็ม
การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชันสากล (ufuncs)
- ฟังก์ชันการรวมค่า
- กฎการกระจายค่า
- การทำมาสก์แบบบูลีนและการใช้ดัชนีแบบยืดหยุ่น