In [1]:
import numpy as np
In [5]:
a = np.arange(1, 16).reshape(3, 5).T
a
Out[5]:
In [7]:
np.arange(1, 6)[:, np.newaxis] + np.arange(0, 11, 5)
Out[7]:
In [8]:
a = np.arange(25).reshape((5,5))
a
Out[8]:
In [9]:
b = np.array([1., 5, 10, 15, 20])
b
Out[9]:
In [11]:
a/b[:, np.newaxis]
Out[11]:
In [68]:
x = np.random.rand(10,3)
In [69]:
a= np.abs(x - 0.5)
In [70]:
b = a.argsort()
b
Out[70]:
In [116]:
e = b[:, 0]
f = np.tile(e[:, np.newaxis], 3)
f
Out[116]:
In [117]:
x[np.arange(10), e]
Out[117]:
In [108]:
g = np.tile(np.arange(3), (10,1))
g
Out[108]:
In [111]:
h = g == f
h
Out[111]:
In [112]:
x[h]
Out[112]:
In [95]:
x
Out[95]:
아래 사이트에 가면 "Lena" 이름의 여성 사신에 대한 설명을 확인할 수 있다.
http://www.cs.cmu.edu/~chuck/lennapg/
위 사이트에서 확인되는 사진은 이미지 압축 알고리즘과 관련해서 가장 많이 사용되는 사진이다.
파이썬에서는 scipy
모듈에서 2차원 어레이 형식으로 Lena
사진 데이터를 제공한다.
In [2]:
from scipy import misc
In [3]:
import matplotlib.pylab as plt
In [4]:
%pylab inline
In [5]:
lena = misc.lena()
lena
Out[5]:
plt.imshow
함수를 이용하여 이미지를 확인할 수 있다.
In [43]:
plt.imshow(lena)
Out[43]:
In [53]:
plt.imshow(lena, cmap='gray')
Out[53]:
In [45]:
crop_lena = lena[100:-100, 100:-100]
plt.imshow(crop_lena, cmap=plt.cm.gray)
Out[45]:
In [9]:
lena.shape
Out[9]:
Lena
의 얼굴 영역을 원으로 감싸보자.
원 바깥 부분은 검은색으로 처리한다.
목걸이 장식으로 사용할 로켓(locket) 처럼 처리하는 내용이다.
예를 들어 가운데 부분을 원으로 처리하면 아래처럼 보이게 할 수 있다.
위 사진을 구현하는 코드를 작성하라.
힌트:
512 x 512
크기의 2차원 어레이에서 특정 반지름의 원 밖을 나타내는
영역을 마스킹하는 마스크를 작성해야 한다.참고로, 반지름이 230인 원의 방정식은 다음과 같다.
(x - center_x)**2 + (y - center_y)**2 = 230**2
가로, 세로 512 x 512 크기의 격자판(grid)을 다루기 위해서는 np.ogrid
함수를 이용한다.
In [9]:
x = np.arange(512)
y = np.arange(512)[:, np.newaxis]
In [10]:
mask = (x - 256)**2 + (y - 256)** 2 > 230**2
In [11]:
mask[230, 430]
Out[11]:
In [12]:
lena[mask]=0
plt.imshow(lena, cmap='gray')
Out[12]:
In [58]:
data = np.loadtxt('data/populations.txt')
In [59]:
data
Out[59]:
data는 2차원 어레이이며 모양은 (21,4) 이다. 이제 전치를 이용하여 토끼, 스라소니, 당근의 21년 동안의 개체수를 담은 어레이를 아래와 같이 구할 수 있다.
In [60]:
year, hares, lynxes, carrots = data.T
연도별 개체수의 변화를 확인하기 위해 그래프를 그려본다.
In [61]:
plt.axes([0.2, 0.1, 0.5, 0.8])
plt.plot(year, hares, year, lynxes, year, carrots)
plt.legend(('Hare', 'Lynx', 'Carrot'), loc=(1.05, 0.5))
Out[61]:
In [62]:
hare_grad = np.gradient(hares)
hare_grad
Out[62]:
In [66]:
plt.plot(year, hare_grad, year, -lynxes)
Out[66]: