※ 위 내용의 복습 글입니다.
숫자 이미지
2차원 데이터
사이킷런 패키지에서 필기된 0과 1의 데이터들을 2차원으로 가져와 보자.
from sklearn.datasets import load_digits
digits = load_digits()
samples = [0,10,20,30,1,11,21,31]
d = []
for i in range(8):
d.append(digits.images[samples[i]])
plt.figure(figsize=(8,2))
for i in range(8):
plt.subplot(1,8,i+1)
plt.imshow(d[i],interpolation='nearest', cmap=plt.cm.bone_r)
plt.grid(False); plt.xticks([]); plt.yticks([])
plt.title("image {}".format(i+1))
plt.suptitle("Num 0 and 1 img")
plt.tight_layout()
plt.show()
1차원 데이터
이제 2차원 데이터(64크기)들을 1차원 데이터들로 변환해보자.
v = []
for i in range(8):
v.append(d[i].reshape(64,1))
plt.figure(figsize=(8, 3))
for i in range(8):
plt.subplot(1, 8, i+1)
plt.imshow(v[i], aspect=0.4,
interpolation='nearest', cmap=plt.cm.bone_r)
plt.grid(False); plt.xticks([]); plt.yticks([])
plt.title("vector {}".format(i + 1))
plt.suptitle("1-dim vector img", y=1.05)
plt.tight_layout(w_pad=7)
plt.show()
1차원 데이터로 보면 같은 숫자의 벡터들이 서로 닮은 것을 알 수 있다.
텐서(tensor)
선형대수에서 정의는 선형 관계를 나타내는 다중선형대수학의 대상이다. 즉, 다차원 배열로 표현되는 mapping이다.
그러나 데이터 사이언스 분야에서는 흔히 다차원 배열 자체를 텐서라 한다.
예를 들어 2차원 행렬처럼 보이는 컬러 이미지는 사실 rgb의 밝기를 나타내는 3가지의 이미지가 겹친 것이다. 즉, 이미지는 3차원 텐셔인 것이다.
from scipy import misc
img_rgb = misc.face() # color image load
img_rgb.shape # data's shape
#output
#(768, 1024, 3)
plt.subplot(221)
plt.imshow(img_rgb, cmap=plt.cm.gray) # output color image
plt.axis("off")
plt.title("RGB Image")
plt.subplot(222)
plt.imshow(img_rgb[:,:,0], cmap=plt.cm.gray) # output red channel
plt.axis("off")
plt.title("Red Channel")
plt.subplot(223)
plt.imshow(img_rgb[:,:,1], cmap=plt.cm.gray) # output green channel
plt.axis("off")
plt.title("Green Channel")
plt.subplot(224)
plt.imshow(img_rgb[:,:,2], cmap=plt.cm.gray) # output blue channel
plt.axis("off")
plt.title("Blue Channel")
plt.show()
전치 행렬(Transpose Matrix)
전치 행렬은 주대각선을 축으로 반사 대칭을 통해 얻는 행렬이다.
Numpy에서 ndarray 객체의 'T'라는 속성을 이용하여 전치 행렬을 구한다. 이때 'T'는 method가 아닌 attribute이므로 소괄호를 붙이면 안 된다.
A = np.array([
[11,21],
[12,22],
[13,23]
])
A.T
#array([[11, 12, 13],
# [21, 22, 23]])
단, 1차원 ndarray에서는 정의되지 않는다.
MATPLOTLIB subplot
subplot method의 인자를 조정하면 그래프 배치를 손쉽게 할 수 있다.
인자는 (행, 열, 순서)이다. 순서는 다음과 같다.
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
사용 예시
# 4x4 중 1번째와 16번째 subplot
plt.subplot(4,4,16)
plt.subplot(4,4,1)
'Jupyter Notebook > 선형대수' 카테고리의 다른 글
[Python] 선형 연립방정식과 역행렬 (1) | 2021.02.26 |
---|---|
[Python] 행렬의 성질 (0) | 2021.02.22 |
[Python] 벡터와 행렬의 연산 (완) (0) | 2021.02.21 |
[Python] 벡터와 행렬의 연산(1) (0) | 2021.02.20 |