In [1]:
import numpy as np
아래 모양의 2차원 어레이가 있다.
$$\left [ \begin{matrix} 1 & 11 & 21 & 31 & 41\\ 3 & 13 & 23 & 33 & 43\\ 5 & 15 & 25 & 35 & 45\\ 7 & 17 & 27 & 37 & 47\\ 9 & 19 & 29 & 39 & 49 \end{matrix} \right ] $$위 모양의 어레이를 구현하는 하나의 방식은 arange
를 이용하여 1차원 어레이를 구현한 다음에
reshape
함수를 이용하여 원하는 모양의 2차원 어레이를 생성하는 것이다. 즉,
np.arange(1, 50, 2).reshape(5, 5).T
In [2]:
x = np.random.rand(10,3)
이제 생성된 어레이의 각 항목들과 0.5 사이의 거리를 계산한다.
In [3]:
a= np.abs(x - 0.5)
argsort
를 이용하여 어레이 x
의 각 행별로 0.5로부터 가장 가까운 값의 위치를 알아낸다.
In [4]:
b = a.argsort()[:,0]
위 정보를 이용하여 x의 각 행별로 0.5로부터 가장 가까운 값이 얼마인지를 다음과 같아 알아낼 수 있다.
In [5]:
min05 = x[np.arange(10), b]
In [6]:
from scipy import misc
import matplotlib.pylab as plt
%pylab inline
아래 사이트에 가면 "Lena" 이름의 여성 사신에 대한 설명을 확인할 수 있다.
http://www.cs.cmu.edu/~chuck/lennapg/
위 사이트에서 확인되는 사진은 이미지 압축 알고리즘과 관련해서 가장 많이 사용되는 사진이다.
파이썬에서는 scipy
모듈에서 2차원 어레이 형식으로 Lena
사진 데이터를 제공한다.
In [7]:
lena = misc.lena()
lena
Out[7]:
In [8]:
plt.imshow(lena, cmap='gray')
Out[8]:
Lena
의 얼굴 영역을 타원으로 감싸보자.
타원 바깥 부분은 검은색으로 처리한다.
목걸이 장식으로 사용할 로켓(locket) 처럼 처리하는 내용이다.
예를 들어 가운데 부분을 원으로 처리하면 아래처럼 보이게 할 수 있다.
참고로, 중심이 (a, b)
이고 x
축의 반지름이 c
, y
축의 반지름이 d
인 타원의 방정식은 다음과 같다.
((x - a)/c)**2 + ((y - b)/d)**2 = 1
위 사진을 얻기 위해서 먼저 lena 사진의 픽셀 크기와 동일한 격자판을 이용하여 마스크를 생성해야 한다.
가로, 세로 각각 512인 격자판을 다루기 위해서는 행과 열을 담당하는 어레이 x
와 y
를 다음과 같이 생성한다.
In [9]:
x = np.arange(512)
y = np.arange(512)[:, np.newaxis]
In [11]:
lena[mask]=0
plt.imshow(lena, cmap='gray')
Out[11]:
In [12]:
data = np.loadtxt('../excs/data/populations.txt')
data
Out[12]:
data는 2차원 어레이이며 모양은 (21,4) 이다.
.