중요한 부분으로 개념을 알고 있어야 한다.
파이썬 행렬곱 (dot product) : np.dot(A,B)로 표현한다.
파이썬 브로드캐스트 (broadcast) : 넘파이에서는 크기가 다른 두행렬간에도 사칙연산을 할수 있게 해주는것을
파이썬 전치행렬 (transpose) : 행렬에 대하여 열은 행으로, 행은 열로 변환 하여 나타낸다 스몰T로 표현한다.
행렬의 원소 접근 방법
파이썬 행렬 슬라이싱 (slicing) : 부분접근 후 값 취득 = 데이타중 특정 부분만 발췌해낼때 이용
파이썬 행렬 iterator (transpose) : 모든 원소를 접근하는 경우 = 순차적으로 읽어드릴때 이용
import numpy as np
A = np.array([ [1, 2, 3], [4, 5, 6] ]) # 2X3 행렬
B = np.array([ [-1, -2], [-3, -4], [-5, -6] ]) # 3X2 행렬
# (2X3) dot porduct (3X2) == (2X2) 행렬
C = np.dot(A, B) # 행렬 곱 수행
# matrix A, B 형상 출력 => shape
print("A.shape ==", A.shape, ", B.shape ==", B.shape)
print("C.shape ==", C.shape)
print(C)
# scalar broadcast
A = np.array([ [1, 2], [3, 4] ])
b = 5
print(A+b)
# matrix broadcast
C = np.array([ [1, 2], [3, 4] ])
D = np.array([4, 5])
print(C+D)
# 전치행렬
A = np.array([ [1, 2], [3, 4], [5, 6] ]) # 3X2행렬
B = A.T # A의 전치행렬, 2X3 행렬
print("A.shape ==", A.shape, ", B.shape ==", B.shape)
print(A)
print(B)
# vector 전치행렬
C = np.array([1, 2, 3, 4, 5]) # vector, matrix 아님
D = C.T # C 는 vector 이므로 transpose 않됨
E = C.reshape(1, 5) # 1X5 matrix
F = E.T # E 의 전치행렬
print("C.shape ==", C.shape, ", D.shape ==", D.shape)
print("E.shape ==", E.shape, ". F.shape ==", F.shape)
print(F)
# reshape
A = np.array([10, 20, 30, 40, 50, 60]).reshape(3, 2)
print("A.shape ==", A.shape)
print(A)
# indexing / slicing
print("A[0, 0] ==", A[0, 0], ", A[0][0] ==", A[0][0])
print("A[2, 1] ==", A[2, 1], ", A[2][1] ==", A[2][1])
print("A[0:-1, 1:2] ==", A[0:-1, 1:2])
print("A[ :, 0] ==", A[:, 0])
print("A[ :, :] ==", A[:, :])
# iterator 예제
A = np.array([ [10, 20, 30, 40], [50, 60, 70, 80] ])
print(A, "\n")
print("A.shape ==", A.shape, "\n")
# 행렬 A 의 itrator 생성
it = np.nditer(A, flags=['multi_index'], op_flags=['readwrite'])
while not it.finished:
idx = it.multi_index
print("current value => ", A[idx])
it.iternext()