[Python] 행렬(Matrix) 계산의 모든 것

0

[3X3] 행렬 만들기

1. np.array() 활용

3X3 행렬을 만들기 위해 np.array()를 활용하면 원하는 자리에 원하는 숫자를 넣을 수 있다.

import numpy as np
A_1 = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9],
])
A_1
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

2. np.zeros() 활용

np.zeros()는 행렬 값을 모두 0으로 채울 수 있다.

A_2 = np.zeros((3,3))
A_2
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

3. np.ones() 활용

np.zeros()와 마찬가지로 행렬 값을 1로 채울 수 있다.

A_3 = np.ones((3,3))
A_3
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

4. np.random.randint() 활용

주어진 범위 안의 숫자로, 원하는 크기의 행렬을 만들 수 있다.

# Explanation - np.random.randint(range, size => matrix)
A_4 = np.random.randint(10, size = (3,3))
A_4
array([[7, 6, 4],
       [0, 1, 9],
       [3, 6, 7]])

행렬 연산(+, -, x, ÷, @)

1. 스칼라(Scala) 값 곱하기 / 나누기

기존의 수학 연산과 동일한 방법으로 곱하고 나누면 된다.

B_multiply = A_3 * 2
B_multiply

B_division = A_3 / 0.5
B_division
array([[2., 2., 2.],
       [2., 2., 2.],
       [2., 2., 2.]])
array([[2., 2., 2.],
       [2., 2., 2.],
       [2., 2., 2.]])

2. 행렬 vs 행렬 – 더하기 / 빼기

기존 방식과 동일

A_1 + A_3
A_1 - A_3
array([[ 2.,  3.,  4.],
       [ 5.,  6.,  7.],
       [ 8.,  9., 10.]])
array([[0., 1., 2.],
       [3., 4., 5.],
       [6., 7., 8.]])

3. 행렬 vs 행렬 – 곱하기

행렬과 행렬을 곱하기 위해서는 *가 아닌 @을 활용하여 곱셈을 한다.

A_1 @ A_3
array([[ 6.,  6.,  6.],
       [15., 15., 15.],
       [24., 24., 24.]])
[Python] 행렬(Matrix) 계산의 모든 것

행렬 변환(Identity / Invertible / Transpose of matrix)

1. Identity matrix (단위행렬)

A라는 행렬에 Identiy matrix를 곱하면 결과는 변하지 않는다. 즉, 일반 곱셈에서 1을 곱한 것과 동일한 역할을 한다.

Ex) 5 x 1 = 5

I = np.identity(3)
I
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
A_1 @ I
array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])

2. Invertible matrix (역행렬)

A 행렬에 Invertible matrix를 곱하면 I(identity matrix)가 계산됨

[Python] 행렬(Matrix) 계산의 모든 것
C = np.array([
    [2,4],
    [6,8]
])

C_invert = np.linalg.pinv(C)
C_invert
array([[-1.  ,  0.5 ],
       [ 0.75, -0.25]])
C @ C_invert
array([[ 1.0000000e+00, -4.4408921e-16],
       [ 8.8817842e-16,  1.0000000e+00]])

-4.4408921e-16 과 8.8817842e-16은 거의 0에 수렴함.

3. Transpose of matrix (전치 행렬)

Transpose of matrix의 경우 [3X2]의 행렬을 [2X3] 행렬로 변환.

D = np.random.randint(5,size = (2,3))
D
array([[4, 2, 2],
       [0, 4, 1]])
D.transpose()
array([[4, 0],
       [2, 4],
       [2, 1]])
D.T
array([[4, 0],
       [2, 4],
       [2, 1]])

D.transpose() == D.T 는 동일.

회신을 남겨주세요

귀하의 의견을 입력하십시오!
여기에 이름을 입력하십시오.