Jupyter Notebook/선형대수

[Python] 데이터와 행렬

 

2.1 데이터와 행렬 — 데이터 사이언스 스쿨

선형대수(linear algebra)는 데이터 분석에 필요한 각종 계산을 돕는 학문이다. 데이터 분석을 하려면 수많은 숫자로 이루어진 데이터를 다루어야 한다. 하나의 데이터가 수십 개에서 수만 개의 숫

datascienceschool.net

※ 위 내용의 복습 글입니다.

 

숫자 이미지

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()

8x8 크기

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이다.

 

텐서(Tensor)

물리학, 수학, 전자파, RF, 초고주파, 안테나, 통신 이론, 정보 이론

ghebook.blogspot.com

그러나 데이터 사이언스 분야에서는 흔히 다차원 배열 자체 텐서라 한다.

 

예를 들어 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)

전치 행렬은 주대각선을 축으로 반사 대칭을 통해 얻는 행렬이다.

https://upload.wikimedia.org/wikipedia/commons/e/e4/Matrix_transpose.gif

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)