ดีเทอร์มิแนนต์ เมทริกซ์ผกผัน และทรานสโพส
คำนวณดีเทอร์มิแนนต์ของเมทริกซ์ด้วย np.linalg.det เมทริกซ์ผกผันด้วย np.linalg.inv และทรานสโพสด้วย .T
ดีเทอร์มิแนนต์ เมทริกซ์ผกผัน และทรานสโพส เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทรานสโพสของเมทริกซ์
ทรานสโพสของเมทริกซ์คือการพลิกเมทริกซ์ตามแนวเส้นทแยงมุม โดยแถวจะกลายเป็นคอลัมน์ และคอลัมน์จะกลายเป็นแถว หาก A มีรูปร่าง (m, n) แล้ว A.T จะมีรูปร่าง (n, m) ทรานสโพสปรากฏอยู่ทั่วพีชคณิตเชิงเส้น เช่น ในการคำนวณเมทริกซ์ความแปรปรวนร่วม การทำการแพร่ย้อนกลับของเกรเดียนต์ และการแปลงระหว่างรูปแบบเวกเตอร์แถวกับเวกเตอร์คอลัมน์ NumPy เข้าถึงทรานสโพสผ่านแอตทริบิวต์ .T โดยไม่มีการสร้างสำเนา แต่เป็นเพียงมุมมองที่มีสไตรด์จัดเรียงใหม่
import numpy as np
A = np.array([[1, 2, 3],
[4, 5, 6]])
print('A shape:', A.shape) # (2, 3)
print('A.T shape:', A.T.shape) # (3, 2)
print(A.T)ทรานสโพสในการใช้งานจริง
รูปแบบที่พบบ่อยคือการคำนวณ A.T @ A ซึ่งให้ผลเป็นเมทริกซ์จัตุรัสสมมาตรที่ปรากฏในการถดถอยกำลังสองน้อยที่สุด, PCA และสมการปกติ หาก A มีรูปร่าง (n, p) แล้ว A.T @ A จะมีรูปร่าง (p, p) ผลลัพธ์จะสมมาตรเสมอ เพราะ (A.T @ A)[i,j] == (A.T @ A)[j,i] ตัวแก้ปัญหาเชิงตัวเลขจำนวนมากใช้คุณสมบัตินี้เพื่อเพิ่มประสิทธิภาพ
import numpy as np
A = np.array([[1.0, 2.0],
[3.0, 4.0],
[5.0, 6.0]]) # shape (3, 2)
ATA = A.T @ A # shape (2, 2), symmetric
print('A.T @ A:')
print(ATA)
print('Is symmetric:', np.allclose(ATA, ATA.T))ดีเทอร์มิแนนต์: ความหมายของมัน
ดีเทอร์มิแนนต์ของเมทริกซ์จัตุรัสคือค่ามาตราส่วนที่บ่งบอกข้อมูลทางเรขาคณิต โดยวัดตัวคูณที่เมทริกซ์ใช้ขยายหรือย่อพื้นที่ (2 มิติ) หรือปริมาตร (มิติที่สูงกว่า) ดีเทอร์มิแนนต์ที่เป็นศูนย์หมายความว่าเมทริกซ์เป็นเมทริกซ์เอกฐาน กล่าวคือมันบีบปริภูมิให้ไปอยู่ในปริภูมิย่อยที่มีมิติต่ำกว่าและไม่มีเมทริกซ์ผกผัน ดีเทอร์มิแนนต์ที่ไม่เป็นศูนย์รับประกันว่าเมทริกซ์ผกผันได้ NumPy คำนวณค่านี้ด้วย np.linalg.det()
import numpy as np
# Non-singular matrix
A = np.array([[3.0, 1.0],
[2.0, 4.0]])
print('det(A):', np.linalg.det(A)) # 3*4 - 1*2 = 10
# Singular matrix (row 2 = 2 * row 1)
B = np.array([[1.0, 2.0],
[2.0, 4.0]])
print('det(B):', np.linalg.det(B)) # ~0การคำนวณเมทริกซ์ผกผันด้วย np.linalg.inv()
เมทริกซ์ผกผันของเมทริกซ์ A ซึ่งเขียนเป็น A⁻¹ จะสอดคล้องกับ A @ A⁻¹ = I โดย I คือเมทริกซ์เอกลักษณ์ เมทริกซ์ผกผันมีอยู่เฉพาะสำหรับเมทริกซ์จัตุรัสที่ไม่เป็นเอกฐานเท่านั้น np.linalg.inv(A) คำนวณเมทริกซ์ผกผันเชิงตัวเลข ในทางปฏิบัติ คุณควรหลีกเลี่ยงการคำนวณเมทริกซ์ผกผันโดยตรงเมื่อไม่จำเป็น เพราะไม่เสถียรเชิงตัวเลข ควรใช้ np.linalg.solve() แทนสำหรับระบบสมการ อย่างไรก็ตาม การเข้าใจแนวคิดของเมทริกซ์ผกผันยังคงเป็นสิ่งสำคัญ
import numpy as np
A = np.array([[3.0, 1.0],
[2.0, 4.0]])
A_inv = np.linalg.inv(A)
print('Inverse:')
print(A_inv)
# Verify: A @ A_inv should be identity
I = A @ A_inv
print('A @ A_inv (should be I):')
print(np.round(I, 10))ความไม่เสถียรเชิงตัวเลขของการหาเมทริกซ์ผกผันโดยตรง
การคำนวณเมทริกซ์ผกผันแล้วจึงนำไปคูณจะทำให้ข้อผิดพลาดเลขจุดลอยตัวสะสมมากขึ้น ตัวอย่างเช่น การแก้ A_inv @ b ให้ความแม่นยำน้อยกว่าการเรียก np.linalg.solve(A, b) โดยตรง เมทริกซ์ที่มีสภาพดี (ดีเทอร์มิแนนต์อยู่ห่างจากศูนย์) จะไวต่อข้อผิดพลาดเหล่านี้น้อยกว่า จำนวนสภาพ (np.linalg.cond(A)) ใช้วัดว่าเมทริกซ์อยู่ใกล้การเป็นเมทริกซ์เอกฐานเพียงใด หากจำนวนสภาพสูง แสดงว่ากำลังมีปัญหาเชิงตัวเลข
import numpy as np
A = np.array([[1.0, 2.0],
[1.0001, 2.0]])
print('Condition number:', np.linalg.cond(A))
# Very high condition number -> near-singular, unstable inversion
b = np.array([3.0, 3.0001])
# Prefer solve over inv @ b
print('Solution via solve:', np.linalg.solve(A, b))เมทริกซ์ตั้งฉากและทรานสโพสของเมทริกซ์เหล่านั้น
เมทริกซ์ประเภทพิเศษคือเมทริกซ์ตั้งฉาก ซึ่งมีคุณสมบัติ A.T @ A = I นั่นหมายความว่าทรานสโพส IS เมทริกซ์ผกผัน จึงทำให้การหาเมทริกซ์ผกผันของเมทริกซ์ตั้งฉากมีต้นทุนต่ำมาก เมทริกซ์การหมุนและตัวประกอบ Q ในการแยก QR เป็นเมทริกซ์ตั้งฉาก คอลัมน์ของเมทริกซ์ตั้งฉากประกอบกันเป็นฐานออร์โธนอร์มอล โดยแต่ละคอลัมน์มีความยาวหนึ่งหน่วยและตั้งฉากกับคอลัมน์อื่นทุกคอลัมน์
import numpy as np
# 90-degree rotation matrix is orthogonal
theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
print('R.T @ R (should be identity):')
print(np.round(R.T @ R, 10))
print('Is orthogonal:', np.allclose(R.T @ R, np.eye(2)))เมทริกซ์ผกผันเทียมสำหรับเมทริกซ์ที่ไม่ใช่จัตุรัส
เมทริกซ์ผกผันทั่วไปมีอยู่เฉพาะสำหรับเมทริกซ์จัตุรัส แต่เมทริกซ์ผกผันเทียมแบบมัวร์-เพนโรสขยายแนวคิดการหาเมทริกซ์ผกผันให้ใช้ได้กับเมทริกซ์ทุกชนิด np.linalg.pinv(A) คำนวณค่านี้โดยใช้ SVD เมทริกซ์นี้เป็นพื้นฐานของคำตอบแบบกำลังสองน้อยที่สุดสำหรับระบบที่มีสมการมากเกินไป (มีสมการมากกว่าตัวไม่ทราบค่า) ซึ่งตรงกับสิ่งที่การถดถอยเชิงเส้นแก้พอดี หาก A เป็นเมทริกซ์จัตุรัสและเมทริกซ์ผกผันได้ pinv(A) จะเท่ากับ inv(A)
import numpy as np
# Over-determined system: 3 equations, 2 unknowns
A = np.array([[1.0, 1.0],
[1.0, 2.0],
[1.0, 3.0]])
b = np.array([2.0, 3.0, 5.0])
# Least-squares solution using pseudo-inverse
x = np.linalg.pinv(A) @ b
print('Best-fit solution:', x)
# Or use lstsq directly
x2, _, _, _ = np.linalg.lstsq(A, b, rcond=None)
print('lstsq solution:', x2)เครื่องหมายของดีเทอร์มิแนนต์และการปรับขนาดปริมาตร
เครื่องหมายของดีเทอร์มิแนนต์บ่งบอกว่าการแปลงนั้นรักษาหรือกลับทิศทางเชิงวางแนว ดีเทอร์มิแนนต์ที่เป็นบวกหมายถึงยังคงรักษาทิศทางไว้ (เช่น การหมุน) ส่วนดีเทอร์มิแนนต์ที่เป็นลบหมายถึงทิศทางถูกกลับด้าน (เช่น การสะท้อน) ค่าสัมบูรณ์ให้ตัวคูณการปรับขนาดปริมาตร สำหรับเมทริกซ์ 2×2 [[a,b],[c,d]], det = a*d - b*c NumPy จัดการเมทริกซ์จัตุรัสที่มีขนาดใดก็ได้อย่างมีประสิทธิภาพ
import numpy as np
# Identity: det = 1 (no scaling, no flip)
I = np.eye(3)
print('det(I):', np.linalg.det(I)) # 1.0
# Scaling by 2 in all directions: det = 8 = 2^3
S = 2 * np.eye(3)
print('det(2I):', np.linalg.det(S)) # 8.0
# Reflection: det = -1
F = np.array([[-1.0, 0.0],
[ 0.0, 1.0]])
print('det(reflection):', np.linalg.det(F))การใช้ np.linalg.slogdet() เพื่อความเสถียร
สำหรับเมทริกซ์ขนาดใหญ่ ดีเทอร์มิแนนต์อาจมีค่ามากเกินช่วงหรือเล็กจนปัดเป็นศูนย์ แม้ว่าเมทริกซ์จะไม่เป็นเอกฐานก็ตาม np.linalg.slogdet(A) คืนค่า (sign, log_abs_det) ซึ่งประกอบด้วยเครื่องหมายและลอการิทึมธรรมชาติของค่าสัมบูรณ์ของดีเทอร์มิแนนต์ ช่วยหลีกเลี่ยงค่าล้นทางตัวเลข วิธีนี้ใช้กันอย่างแพร่หลายในแบบจำลองความน่าจะเป็น (เช่น ความน่าจะเป็นแบบเกาส์เซียน) ซึ่งทำงานในปริภูมิลอการิทึมเพื่อให้จัดการตัวเลขได้ง่าย
import numpy as np
A = np.random.rand(100, 100)
# Direct det might underflow for large matrices
sign, logdet = np.linalg.slogdet(A)
print('Sign:', sign)
print('Log|det|:', logdet)
print('Actual det (may be ~0 due to float):', np.linalg.det(A))
print('Reconstructed |det|:', np.exp(logdet))ภาคปฏิบัติ: การแก้เมทริกซ์ 2x2 ด้วยมือเทียบกับ NumPy
สำหรับเมทริกซ์ 2×2 [[a, b], [c, d]] เมทริกซ์ผกผันคือ (1/det) * [[d, -b], [-c, a]] โดย det = ad - bc การทราบสูตรนี้ช่วยให้คุณตรวจสอบผลลัพธ์ของ NumPy แบบคร่าว ๆ ได้ สำหรับเมทริกซ์ที่ใหญ่กว่านี้ การคำนวณเมทริกซ์ผกผันด้วยวิธีวิเคราะห์ทำได้ยากและไม่เหมาะสม นี่คือเหตุผลโดยตรงที่เราใช้ np.linalg.inv() ควรตรวจสอบผลลัพธ์เชิงตัวเลขด้วย np.allclose(A @ A_inv, np.eye(n)) เสมอ
import numpy as np
a, b, c, d = 3.0, 1.0, 2.0, 4.0
A = np.array([[a, b], [c, d]])
det = a*d - b*c
# Manual inverse
A_inv_manual = (1/det) * np.array([[d, -b], [-c, a]])
print('Manual inv:')
print(A_inv_manual)
# NumPy inverse
print('np.linalg.inv:')
print(np.linalg.inv(A))
print('Match:', np.allclose(A_inv_manual, np.linalg.inv(A)))การรวมทรานสโพสและเมทริกซ์ผกผันในกระบวนการประมวลผล
รูปแบบพีชคณิตเชิงเส้นที่พบบ่อยมักรวมทรานสโพสและเมทริกซ์ผกผันเข้าด้วยกัน: การคำนวณ (A.T @ A)⁻¹ @ A.T ให้เมทริกซ์การฉายที่ใช้ในการหาค่ากำลังสองน้อยที่สุดแบบธรรมดา ใน NumPy สามารถเขียนเป็น np.linalg.inv(A.T @ A) @ A.T ได้ แต่เช่นเดิม np.linalg.lstsq เหมาะสมกว่าในด้านความเสถียรเชิงตัวเลข การเข้าใจรูปแบบเบื้องหลังช่วยให้คุณเข้าใจว่าตัวแก้ปัญหาทำงานอย่างไร และช่วยแก้จุดขัดข้องเมื่อเมทริกซ์เกือบเป็นเอกฐาน
import numpy as np
# Design matrix for simple linear regression (with bias)
X = np.column_stack([np.ones(5), np.array([1., 2., 3., 4., 5.])])
y = np.array([2.1, 3.9, 6.2, 8.1, 9.8])
# OLS via normal equations: beta = (X.T @ X)^-1 @ X.T @ y
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print('Coefficients (intercept, slope):', np.round(beta, 3))
# Verify with lstsq
beta2, _, _, _ = np.linalg.lstsq(X, y, rcond=None)
print('lstsq result:', np.round(beta2, 3))ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจของคุณเกี่ยวกับแนวคิดการวิเคราะห์ข้อมูลจากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า A.T คือทรานสโพสที่สลับแถวกับคอลัมน์, np.linalg.inv() ใช้คำนวณเมทริกซ์ผกผัน แต่ไม่ควรใช้โดยตรงบ่อยนัก (ควรใช้ solve หรือ lstsq แทน) และ np.linalg.det() คืนค่าดีเทอร์มิแนนต์ ซึ่งจะเป็นศูนย์สำหรับเมทริกซ์เอกฐาน ต่อไปเราจะสำรวจการแก้ระบบสมการเชิงเส้นโดยตรงด้วย np.linalg.solve
คำถามที่พบบ่อย
บทเรียน “ดีเทอร์มิแนนต์ เมทริกซ์ผกผัน และทรานสโพส” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ดีเทอร์มิแนนต์ เมทริกซ์ผกผัน และทรานสโพส” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ดีเทอร์มิแนนต์ เมทริกซ์ผกผัน และทรานสโพส”
คำนวณดีเทอร์มิแนนต์ของเมทริกซ์ด้วย np.linalg.det เมทริกซ์ผกผันด้วย np.linalg.inv และทรานสโพสด้วย .T คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ดีเทอร์มิแนนต์ เมทริกซ์ผกผัน และทรานสโพส” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การคูณเมทริกซ์ด้วย np.matmul และ @
- ดีเทอร์มิแนนต์ เมทริกซ์ผกผัน และทรานสโพส
- การแก้ระบบสมการเชิงเส้น
- ภาพรวมค่าเฉพาะและ SVD