먼저 \(2 \times 3\) 행렬 \(A\)를 생성해 보자.
\[ A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \]
import numpy as np
A = np.array([[1,2,3], [4,5,6]])
이 행렬을 \(3 \times 2\) 로 바꾼 행렬 \(B\)를 만들려면 ndarray.reshape 라는 함수를 사용한다.
\[ B = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} \]
B = A.reshape((3,2))
print("A=",A, "\nB=",B)
소괄호가 두 개가 있음에 주의해야 한다. 성분의 배치 순서는 행렬 \(A\)의 첫 행의 처음부터 시작하여 오른쪽으로 가면서 차례로 행렬 \(B\)의 성분을 채운다.
행렬 \(A\) 자체를 \(3 \times 2\) 행렬로 바꾸고 싶으면 ndarray.resize 를 사용한다.
A.resize((3,2))
print("A=",A)
전치(transpose)는 ndarray.T를 사용한다.
\[ C = B^T = \begin{bmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{bmatrix} \]
C = B.T
print("B=", B, "\nC=", C)
넘파이에서 어레이의 인덱스는 \(0\)에서 시작한다.
따라서 행렬 \(C\)에서 2행3열 성분값을 추출하려면 다음과 같이 행과 열을 표시한다.
print(C[1,2])
행렬 \(C\)에서 1행 전체를 추출하려면 다음과 같이 한다.
print(C[0, :])
콜론( : )은 전체를 의미한다. 행렬 \(C\)에서 2행에서 2열부터 3열까지 추출하려면 매트랩에서는 C(2,2:3)하면 되는데, 넘파이에서는 인덱스를 고려해도 C[1,1:2]로 해야할 것 같은데 C[1,1:3]으로 한다.
print(C[1, 1:3])
행렬 \(A\)에 \(C\)를 추가하고 싶으면 np.append 함수를 사용한다. axis=0 이면 행으로 추가, axis=1 이면 열로 추가한다.
\[ D = \begin{bmatrix} A \\ C \end{bmatrix} = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 1 & 3 & 5 \\ 2 & 4 & 6 \end{bmatrix}, \ \ \ E = \begin{bmatrix} A & C \end{bmatrix} \]
A = np.array([[1,2,3], [4,5,6]])
C = np.array([[1,3,5], [2,4,6]])
D = np.append(A, C, axis=0)
print("D=", D)
E = np.append(A, C, axis=1)
print("E=", E)
np.concatenate 도 같은 기능을 한다. axis=0 이면 행으로 추가, axis=1 이면 열로 추가한다. 행렬 \(A\)와 \(C\)를 소괄호로 묶는데 주의해야 한다.
\[ F2= \begin{bmatrix} A & C \end{bmatrix} = \begin{bmatrix} 1 & 2 & 3 & 1 & 3 & 5 \\ 4 & 5 & 6 & 2 & 4 & 6 \end{bmatrix}, \ \]
F1 = np.concatenate((A,C),axis=0)
print("F1=", F1)
F2 = np.concatenate((A,C),axis=1)
print("F2=", F2)
np.vstack 은 두 행렬을 세로로 쌓고, np.hstack 은 가로로 쌓는다.
G = np.hstack((A,C))
print("G=", G)
행렬을 성분으로 하는 큰 행렬을 만드려면 np.tile 을 사용한다. 가령 행렬 \(A\)를 성분으로 하는 2행3열의 큰 행렬은 다음과 같이 만든다.
\[ H= \begin{bmatrix} A & A & A \\ A & A & A \end{bmatrix} \]
H = np.tile(A, [2,3])
print(H.shape)
차원 또는 축(axis)를 추가시키려면 np.expand_dim 함수를 사용한다. axis=0 이면 행축 추가, axis=1 이면 열축 추가, axis=-1 이면 마지막 축 추가를 의미한다.
\(A\)의 모양 (2,3) 에서 행축 (axis=0)이 추가됐으므로 \(I\)의 모양은 (1,2,3) 이 된다.
A = np.array([[1,2,3], [4,5,6]])
I = np.expand_dims(A, axis=0)
print(A.shape, I.shape)
print("I=", I)
열축 (axis=1)이 추가되면 \(J\)의 모양은 (2,1,3) 이 된다.
J = np.expand_dims(A, axis=1)
print(A.shape, J.shape)
print("J=", J)
깊이축 또는 마지막축 (axis=2 또는 axis= -1)이 추가되면 \(K\)의 모양은 (2,3,1) 이 된다.
K = np.expand_dims(A, axis=-1)
print(A.shape, K.shape)
print("K=", K)
'프로그래밍 > 파이썬' 카테고리의 다른 글
판다스(Pandas)에서 CSV파일 읽기 (0) | 2023.05.18 |
---|---|
주피터 노트북 사용법 (0) | 2021.05.05 |
넘파이(numpy)에서 행렬 연산 (0) | 2021.03.12 |
넘파이(numpy)에서 행렬 생성 (0) | 2021.03.11 |
댓글