Jupyter Notebook/선형대수

[Python] 벡터와 행렬의 연산 (완)

 

[Python] 벡터와 행렬의 연산(1)

2.2 벡터와 행렬의 연산 — 데이터 사이언스 스쿨 벡터와 행렬도 숫자처럼 덧셈, 뺄셈, 곱셈 등의 연산을 할 수 있다. 벡터와 행렬의 연산을 이용하면 대량의 데이터에 대한 계산을 간단한 수식으

return-value.tistory.com

 

행렬의 교환 법칙과 분배 법칙

행렬의 곱셈은 교환 법칙이 성립하지 않으나 덧셈/뺄셈의 분배 법칙은 성립한다.

 

 

전치 연산이나 역행렬에서도 덧셈/뺄셈의 분배 법칙이 성립한다. 또한 곱셈에서도 분배 법칙이 성립하지만 곱셈의 순서가 바뀐다.

 

연습 문제 2.2.5

 -> N x 1 @ 1 x N -> N x N

 -> XT : M x N, M x N @ N x 1 - > M x 1 

 

(3) 다음 코드를 실행하면 붓꽃 전체 데이터를 모두 벡터로 변환하여 하나의 넘파이 행렬 X 를 만든다.

from sklearn.datasets import load_iris
X = load_iris().data

이 데이터로 행렬 X¯의 값을 계산하라. 이 행렬은 첫 번째 열의 값이 모두 같은 값으로 붓꽃의 꽃받침의 길이(sepal length)의 평균이고 두 번째 열의 값이 모두 같은 값으로 붓꽃의 꽃받침의 폭(sepal width)의 평균, 이런 식으로 계산된 행렬이다.

결과

항등행렬의 곱셈

어떤 행렬이든 항등행렬을 곱하면 자기 자신이 유지된다.

열 벡터의 선형조합

행렬 X와 벡터 w의 곱은 행렬 X의 열벡터 c1, c2 ... 와 벡터 w의 성분 w1 w2, ... 으로 선형조합(linear combination)을 한 결과 벡터와 같다.

연습 문제 2.2.7

Morphing

Vector의 linear combination의 예로 두 이미지를 섞어 놓는 모핑(morphing)이 있다.

from sklearn.datasets import fetch_olivetti_faces

faces = fetch_olivetti_faces()

f, ax = plt.subplots(1, 3)

ax[0].imshow(faces.images[6], cmap=plt.cm.bone)
ax[0].grid(False); ax[0].set_xticks([]); ax[0].set_yticks([])
ax[0].set_title("image 1 : $x_1$")

ax[1].imshow(faces.images[10], cmap=plt.cm.bone)
ax[1].grid(False); ax[1].set_xticks([]); ax[1].set_yticks([])
ax[1].set_title("image 2 : $x_2$")

# morphing
new_face = 0.7 * faces.images[6] + 0.3 * faces.images[10]
ax[2].imshow(new_face, cmap=plt.cm.bone)
ax[2].grid(False); ax[2].set_xticks([]); ax[2].set_yticks([])
ax[2].set_title("image 3 : $0.7x_1 + 0.3X_2$")

plt.show()

morphing 결과

 

'Jupyter Notebook > 선형대수' 카테고리의 다른 글

[Python] 선형 연립방정식과 역행렬  (1) 2021.02.26
[Python] 행렬의 성질  (0) 2021.02.22
[Python] 벡터와 행렬의 연산(1)  (0) 2021.02.20
[Python] 데이터와 행렬  (0) 2021.02.19