<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 기말고사 예비 문제집
Step1:  문제 1
아래 모양의 2차원 어레이를 작성하라. 
    단, 항목들을 일일이 입력하는 방식은 사용할 수 없다.
$$\left [ 
\begin{matrix} 
1 & 6 & 11 \ 
2 & 7 & 12 \ 
3 & 8 & 13 \
4 & 9 & 14 \
5 & 10 & 15
\end{matrix} 
\right ]
$$
2. 위 행렬에서 2번 및 4번 행만으로 구성된 새로운 2차원 어레이를 생성하라.
Step2:  문제 2
어레이 a가 다음과 같다.
a = np.arange(25).reshape((5,5))
어레이 a의 각 열을 아래의 어레이 b로 나누어라. 
b = np.array([1., 5, 10, 15, 20])
힌트
Step3:  문제 3
먼저, 구간 [0, 1]에서 임의로 숫자를 뽑아 10 x 3 행렬 모양의 2차원 어레이를 생성하라. 
생성된 어레이의 각 행에서 0.5에 가장 가까운 숫자를 확인하라. 
힌트
Step4:  문제 4
아래 사이트에 가면 "Lena" 이름의 여성 사신에 대한 설명을 확인할 수 있다. 
http
Step5:  plt.imshow 함수를 이용하여 이미지를 확인할 수 있다.
Step6:  위 사진은 2차원 어레이 정보를 이용하므로 정확하지 않다. 
    흑백 사진으로 표현하고 싶으면 다음과 같이 할 수 있다.
Step7:  영역선택(crop) 기능을 이용하여 특정 영역을 확대해보자. 
    예를 들어 모든 테두리로부터 30픽셀씩 제거해보자. 
    픽셀 제거는 슬라이싱을 이용한다.
Step8:  Lena의 얼굴 영역을 원으로 감싸보자. 
    원 바깥 부분은 검은색으로 처리한다. 
    목걸이 장식으로 사용할 로켓(locket) 처럼 처리하는 내용이다.
    예를 들어 가운데 부분을 원으로 처리하면 아래처럼 보이게 할 수 있다.
<img src="images/lena-locket.png" width="300">
위 사진을 구현하는 코드를 작성하라.
힌트
Step9:  문제 5
1900년부터 1920년까지 캐나다 북부지역에서 산토끼, 스라소니, 당근의 개체수의 변화를 조사한 데이터가 아래와 같다.
Step10:  data는 2차원 어레이이며 모양은 (21,4) 이다.
이제 전치를 이용하여 토끼, 스라소니, 당근의 21년 동안의 개체수를 담은 어레이를 아래와 같이 구할 수 있다.
Step11:  연도별 개체수의 변화를 확인하기 위해 그래프를 그려본다.
Step12:  각 종별로 평균 및 표준편차를 구하라.
각 종별로 가장 적은 개체수를 보였던 연도와 두 번째로 적었던 개체수를 보였던 연도를 구하라. 
토끼 개체수의 변화와 스라소니 개체수 변화 사이의 상관관계를 설명하라. np.gradient 함수와 np.corrcoef 함수를 이용하라.
<ASSISTANT_TASK:>
Python Code:
import numpy as np
Explanation: 기말고사 예비 문제집
End of explanation
a = np.arange(1, 16).reshape(3, 5).T
a
np.arange(1, 6)[:, np.newaxis] + np.arange(0, 11, 5)
Explanation: 문제 1
아래 모양의 2차원 어레이를 작성하라. 
    단, 항목들을 일일이 입력하는 방식은 사용할 수 없다.
$$\left [ 
\begin{matrix} 
1 & 6 & 11 \ 
2 & 7 & 12 \ 
3 & 8 & 13 \
4 & 9 & 14 \
5 & 10 & 15
\end{matrix} 
\right ]
$$
2. 위 행렬에서 2번 및 4번 행만으로 구성된 새로운 2차원 어레이를 생성하라.
End of explanation
a = np.arange(25).reshape((5,5))
a
b = np.array([1., 5, 10, 15, 20])
b
a/b[:, np.newaxis]
Explanation: 문제 2
어레이 a가 다음과 같다.
a = np.arange(25).reshape((5,5))
어레이 a의 각 열을 아래의 어레이 b로 나누어라. 
b = np.array([1., 5, 10, 15, 20])
힌트: np.newaxis를 활용하라.
End of explanation
x = np.random.rand(10,3)
a= np.abs(x - 0.5)
b = a.argsort()
b
e = b[:, 0]
f = np.tile(e[:, np.newaxis], 3)
f
x[np.arange(10), e]
g = np.tile(np.arange(3), (10,1))
g
h = g == f
h
x[h]
x
Explanation: 문제 3
먼저, 구간 [0, 1]에서 임의로 숫자를 뽑아 10 x 3 행렬 모양의 2차원 어레이를 생성하라. 
생성된 어레이의 각 행에서 0.5에 가장 가까운 숫자를 확인하라. 
힌트:
np.abs와 np.argsort를 이용하여 각 행별로 0.5에 가장 가깝게 위치한
    숫자의 위치를 확인하라. 
팬시 인덱싱을 활용하여 행별로 0.5에 가장 가까운 숫자를 구할 수 있다.
End of explanation
from scipy import misc
import matplotlib.pylab as plt
%pylab inline
lena = misc.lena()
lena
Explanation: 문제 4
아래 사이트에 가면 "Lena" 이름의 여성 사신에 대한 설명을 확인할 수 있다. 
http://www.cs.cmu.edu/~chuck/lennapg/
위 사이트에서 확인되는 사진은 이미지 압축 알고리즘과 관련해서 가장 많이 사용되는 사진이다.
파이썬에서는 scipy 모듈에서 2차원 어레이 형식으로 Lena 사진 데이터를 제공한다.
End of explanation
plt.imshow(lena)
Explanation: plt.imshow 함수를 이용하여 이미지를 확인할 수 있다.
End of explanation
plt.imshow(lena, cmap='gray')
Explanation: 위 사진은 2차원 어레이 정보를 이용하므로 정확하지 않다. 
    흑백 사진으로 표현하고 싶으면 다음과 같이 할 수 있다.
End of explanation
crop_lena = lena[100:-100, 100:-100]
plt.imshow(crop_lena, cmap=plt.cm.gray)
lena.shape
Explanation: 영역선택(crop) 기능을 이용하여 특정 영역을 확대해보자. 
    예를 들어 모든 테두리로부터 30픽셀씩 제거해보자. 
    픽셀 제거는 슬라이싱을 이용한다.
End of explanation
x = np.arange(512)
y = np.arange(512)[:, np.newaxis]
mask = (x - 256)**2 + (y - 256)** 2 > 230**2
mask[230, 430]
lena[mask]=0
plt.imshow(lena, cmap='gray')
Explanation: Lena의 얼굴 영역을 원으로 감싸보자. 
    원 바깥 부분은 검은색으로 처리한다. 
    목걸이 장식으로 사용할 로켓(locket) 처럼 처리하는 내용이다.
    예를 들어 가운데 부분을 원으로 처리하면 아래처럼 보이게 할 수 있다.
<img src="images/lena-locket.png" width="300">
위 사진을 구현하는 코드를 작성하라.
힌트: 
먼저, lena 어레이는 (512, 512) 모양의 2차원 어레이임을 확인한다.
마스크와 팬시 인덱싱을 사용한다.
512 x 512 크기의 2차원 어레이에서 특정 반지름의 원 밖을 나타내는 
    영역을 마스킹하는 마스크를 작성해야 한다.
참고로, 반지름이 230인 원의 방정식은 다음과 같다. 
(x - center_x)**2 + (y - center_y)**2 = 230**2
가로, 세로 512 x 512 크기의 격자판(grid)을 다루기 위해서는 np.ogrid 함수를 이용한다.
위 격자판의 중심에서의 거리가 230 이상인 항목의 값을 0으로 처리한다.
End of explanation
data = np.loadtxt('data/populations.txt')
data
Explanation: 문제 5
1900년부터 1920년까지 캐나다 북부지역에서 산토끼, 스라소니, 당근의 개체수의 변화를 조사한 데이터가 아래와 같다.
End of explanation
year, hares, lynxes, carrots = data.T
Explanation: data는 2차원 어레이이며 모양은 (21,4) 이다.
이제 전치를 이용하여 토끼, 스라소니, 당근의 21년 동안의 개체수를 담은 어레이를 아래와 같이 구할 수 있다.
End of explanation
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))
hare_grad = np.gradient(hares)
hare_grad
Explanation: 연도별 개체수의 변화를 확인하기 위해 그래프를 그려본다.
End of explanation
plt.plot(year, hare_grad, year, -lynxes)
Explanation: 각 종별로 평균 및 표준편차를 구하라.
각 종별로 가장 적은 개체수를 보였던 연도와 두 번째로 적었던 개체수를 보였던 연도를 구하라. 
토끼 개체수의 변화와 스라소니 개체수 변화 사이의 상관관계를 설명하라. np.gradient 함수와 np.corrcoef 함수를 이용하라.
End of explanation
<END_TASK>