대각 원소 1이고, 나머지는 0인 n차 정방행렬을 말한다.
identity = np.eye(4)
#array([[1., 0., 0., 0.],
# [0., 1., 0., 0.],
# [0., 0., 1., 0.],
# [0., 0., 0., 1.]])
대각 성분 이외의 모든 성분이 0인 n차 정방행렬을 말한다.
x = np.arange(9).reshape(3, -1)
#array([[0, 1, 2],
# [3, 4, 5],
# [6, 7, 8]])
np.diag(np.diag(x)) # diag로 대각값을 들고와 새로 만든것이다.
#array([[0, 0, 0],
# [0, 4, 0],
# [0, 0, 8]])
벡터의 내적(행렬의 곱)
dot는 1차원에서 사용되지만, 2차원으로 사용될 경우 자동으로 matmul로 계산된다.
matmul은 2차원이상의 곱을 할때 사용된다.
# dot
a= np.arange(4).reshape(-1, 2)
#array([[0, 1],
# [2, 3]])
np.dot(a, a)
#array([[ 2, 3],
# [ 6, 11]])
# matmul
a = np.random.randint(-3, 3, 10).reshape(2, -1)
b = np.random.randint(0, 5, 15).reshape(5, -1)
#a
#array([[-3, 0, 1, -3, 1],
# [ 0, -1, -1, 0, 0]])
#b
#array([[3, 2, 1],
# [0, 4, 2],
# [4, 2, 0],
# [2, 2, 2],
# [1, 3, 0]]))
ab = np.matmul(a,b)
#array([[-10, -7, -9],
# [ -4, -6, -2]]))
# 기본적으로 행렬의 곱 법칙을 따라가야한다.
ba = np.matmul(b, a) # 행렬이 하나라도 맞지 않으니 에러
# error
ab = np.matmul(a, b.T) # 기존의 값들은 하나라도 맞았지만, 바꾸면서 안맞아짐
# error