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

ดีเทอร์มิแนนต์ เมทริกซ์ผกผัน และทรานสโพส

คำนวณดีเทอร์มิแนนต์ของเมทริกซ์ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การคูณเมทริกซ์ด้วย np.matmul และ @
  2. ดีเทอร์มิแนนต์ เมทริกซ์ผกผัน และทรานสโพส
  3. การแก้ระบบสมการเชิงเส้น
  4. ภาพรวมค่าเฉพาะและ SVD
← กลับไปที่ Pandas & NumPy Academy