상위 목록: 하위 목록: 작성 날짜: 읽는 데 2 분 소요

행렬 곱

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[1, 3], [2, 4]])

print(a * b)
print(a @ b)
print(np.matmul(a, b))
결과
[[ 1 6]
 [ 6 16]]
[[ 5 11]
 [11 25]]
[[ 5 11]
 [11 25]]

array * array의 경우, 결과는 각각의 원소에 대한 곱을 반환합니다.

행렬의 곱을 계산해야 하는 경우, @ 연산자 또는 np.matmul(배열1, 배열2) 함수를 사용합니다.

a @ b의 첫 번째 원소는 a의 첫 번째 행 [1, 2]와 b의 첫 번째 열 [1, 2]의 곱의 합인 1×1 + 2×2 = 5로 계산됩니다.

  • Tip : np.dot(배열1, 배열2)도 2차원 배열에서는 행렬 곱과 같은 결과를 반환합니다. 다만 3차원 이상의 배열에서는 np.matmul과 계산 방식이 다르므로, 행렬 곱에는 @ 연산자를 사용하는 것을 권장합니다.



매트릭스 클래스

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[1-1j, 2-1j], [3, 4]])
c = np.array([[1, 3], [2, 4]])
d = np.array([[1, 3], [2, 4]])

ma = np.asmatrix(a).T
mb = np.asmatrix(b).H
mc = np.asmatrix(c).I
md = np.asmatrix(d).A

print(ma)
print(mb)
print(mc)
print(md)
print(np.asmatrix(a) * np.asmatrix(c))
결과
[[1 3]
 [2 4]]
[[1.+1.j 3.-0.j]
 [2.+1.j 4.-0.j]]
[[-2. 1.5]
 [ 1. -0.5]]
[[1 3]
 [2 4]]
[[ 5 11]
 [11 25]]

np.asmatrix(배열)을 사용하여 array를 matrix 형식으로 변환할 수 있습니다. matrix 형식은 항상 2차원이며, * 연산자가 행렬 곱을 계산합니다.

matrix.T의 경우, 매트릭스의 전치값을 반환합니다.

matrix.H의 경우, 매트릭스의 켤레 전치(공액 전치)값을 반환합니다.

matrix.I의 경우, 매트릭스의 역행렬값을 반환합니다.

matrix.A의 경우, 매트릭스 형식을 다시 array 형식으로 변환하여 반환합니다.

  • Tip : NumPy 2.0부터 np.mat 함수는 제거되었으며, np.asmatrix를 사용해야 합니다.

  • Tip : Numpy 공식 문서는 matrix 클래스의 사용을 권장하지 않습니다. array와 @ 연산자로 모든 행렬 연산을 수행할 수 있으며, matrix 클래스는 향후 제거될 수 있습니다.



배열로 행렬 연산하기

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[1-1j, 2-1j], [3, 4]])
c = np.array([[1, 3], [2, 4]])

print(a.T)
print(b.conj().T)
print(np.linalg.inv(c))
결과
[[1 3]
 [2 4]]
[[1.+1.j 3.-0.j]
 [2.+1.j 4.-0.j]]
[[-2. 1.5]
 [ 1. -0.5]]

matrix 클래스의 속성은 array에서 다음과 같이 대체할 수 있습니다.

matrix array 의미
m.T a.T 전치
m.H a.conj().T 켤레 전치
m.I np.linalg.inv(a) 역행렬
m * n a @ b 행렬 곱



선형대수 함수

import numpy as np

a = np.array([[3, 1], [1, 2]])
y = np.array([9, 8])

x = np.linalg.solve(a, y)

print(np.linalg.det(a))
print(np.linalg.inv(a))
print(x)
print(a @ x)
결과
5.000000000000001
[[ 0.4 -0.2]
 [-0.2 0.6]]
[2. 3.]
[9. 8.]

np.linalg 모듈은 행렬식, 역행렬, 연립방정식 등 선형대수 연산을 제공합니다.

np.linalg.det(배열)은 행렬식을, np.linalg.inv(배열)은 역행렬을 반환합니다. 행렬식은 부동소수점 연산으로 계산되므로 5가 아닌 5.000000000000001처럼 미세한 오차가 발생할 수 있습니다.

np.linalg.solve(A, y)는 연립방정식 Ax = y의 해 x를 반환합니다. 위 예제는 3x₀ + x₁ = 9, x₀ + 2x₁ = 8의 해인 x₀ = 2, x₁ = 3을 계산합니다.

  • Tip : 연립방정식을 풀 때는 np.linalg.inv(A) @ y보다 np.linalg.solve(A, y)가 더 빠르고 수치적으로 안정적입니다. 역행렬이 존재하지 않는 행렬을 입력하면 LinAlgError가 발생합니다.
함수 설명
np.linalg.det( array ) 행렬식
np.linalg.inv( array ) 역행렬
np.linalg.solve( array, y ) 연립방정식의 해
np.linalg.eig( array ) 고윳값과 고유벡터
np.linalg.norm( array ) 노름(벡터의 크기)
np.linalg.matrix_rank( array ) 행렬의 계수
np.trace( array ) 대각합(대각 원소의 합)

댓글 남기기