본문 바로가기
  • 인공지능 과 디지털 데이터 생성 실험실
  • 인공지능 과 자동화
  • 생성형 AI 실험실
4Z1 - Artificial Intelligence/python for ML

MRP -112: 1-2. 파이썬 Numpy - dot product/broadcastindex / slice / iterator

by Richrad Chung 2020. 9. 16.
중요한 부분으로 개념을 알고 있어야 한다.
파이썬 행렬곱 (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()