행렬곱 (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)
실행결과