본문 바로가기

개인 공부

Python) numpy 사용 - 행렬 연산

 

 

 

행렬곱 (dot product) - np.dot()

import numpy as np

def dot(a,b):
    c=np.zeros((2,4))
    for row in range(0,2):
        for col in range(0,4):
            temp = 0
            for diagonal in range(0,3):
                temp+=(a[row][diagonal]*b[diagonal][col])
            c[row][col]=temp
    return c

a=[[1,2,4],
   [2,6,0]]
b=[[4,1,4,3],
   [0,-1,3,1],
   [2,7,5,2]]
c=np.array([[1,2,4],
            [2,6,0]])
d=np.array([[4,1,4,3],
           [0,-1,3,1],
            [2,7,5,2]])

print("직접 만든 함수 \n",dot(a,b))
print("numpy dot() \n",np.dot(c,d))

 

numpy를 사용하는 행렬은 np.array()함수를 이용해 만들어줍니다.

이때 numpy가 만드는 행렬 데이터타입은 ndarray라고 하는데요. 연산처리속도가 빠르다고 합니다.

 

실행결과

전치행렬 (transpose) - np.transpose()

 

행렬 a가 

3 1 -7
2 4 11 
3 3 9

일때, 아래와 같은 코드로 전치행렬을 직접 구하거나 편리하게 numpy를 사용해서 구할 수 있습니다.

import numpy as np

def transpose(a,m):
    c=np.zeros((m,m))
    for row in range(0,m):
        for col in range(0,m):
            c[col][row]=a[row][col]
    return c

a=[[3,1,-7],
   [2,4,11],
   [3,3,9]]
   
b = np.array([[3,1,-7],
   [2,4,11],
   [3,3,9]])
c=transpose(a,3)

d=d.transpose()

print("transpose matrix using def\n", c)
print("transpose matrix using numpy\n", d)

실행결과

대각합(trace) - np.trace()

대각합의 경우는 행렬이 m*m인 정사각행렬인 경우에만 사용할 수 있습니다.

import numpy as np

a=np.array([[-10,4],
           [5,6]])

print(np.trace(a))

이 경우 tr(a)= -10 + 6 = -4 가 대각합으로 출력됩니다.

대각합은 col와 row가 같은 요소들만 더해줍니다.

 

항등행렬 - np.eye(m=, k=, dtype=)

n은 행의 개수를, m은 열의 개수를, k는 대각의 위치를 가리킵니다.(0일때 대각)

I=np.eye(2,4,1,dtype=int)

 

실행결과