2015년 2학기 공업수학 기말고사 시험지

이름:

학번:

시험지 작성 요령

  • 예제코드를 보면서 문제의 내용을 이해하도록 노력한다.
  • 문제별로 '해야 할 일' 에서 요구하는 방향으로 변경된 코드의 빈자리를 채우거나 답을 한다.

In [1]:
import numpy as np

문제 1

1차원 및 2차원 어레이를 생성하는 기본 정의들을 확인하는 문제이다.

해야 할 일 1 (5점)

아래 모양의 1차원 어레이를 생성하는 코드를 작성하라.

$$\left [ \begin{matrix} 1 & 11 & 21 & 31 & 41\\ \end{matrix} \right ] $$
답안)
해야 할 일 2 (5점)

아래 모양의 2차원 어레이를 생성하는 코드를 작성하라.

$$\left [ \begin{matrix} 1 & 2 & 3 & 4 & 5\\ 6 & 7 & 8 & 9 & 10 \end{matrix} \right ] $$
답안)

문제 2

아래 모양의 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
해야 할 일 3 (10점)

아래 코드가 어떻게 해서 위 모양의 어레이를 생성하는지 사용된 함수, 메소드, 속성을 설명하라.

np.arange(1, 50, 2).reshape(5, 5).T

답안)



.
해야 할 일 4 (10점)

위 행렬을 브로드캐스팅과 어레이의 덧셈을 이용하여 구현하라.

답안)

.
해야 할 일 5 (5점)

위 행렬에서 1번 및 3번 행만으로 구성된 새로운 2차원 어레이를 생성하라.

답안)

.
해야 할 일 6 (5점)

위 행렬에서 0번, 2번 및 4번 행과 1번 및 3번 열이 만나는 위치의 값들로만 구성된 새로운 2차원 어레이를 생성하라. 즉, 아래 모양의 행렬에 해당하는 어레이를 생성해야 한다.

$$\left [ \begin{matrix} 11 & 31\\ 15 & 35\\ 19 & 39 \end{matrix} \right ] $$
답안)

.
해야 할 일 7 (5점)

위 행렬의 대각선에 해당하는 1차원 어레이를 구현하라. 즉, 아래 모양의 어레이를 생성해야 한다.

$$\left [ \begin{matrix} 1 & 13 & 25 & 37 & 49 \end{matrix} \right ] $$
답안)

.

문제 3

어레이 a와 b가 다음과 같다.

a = np.arange(1, 8, 2).reshape((2, 2))
b = np.array([1., 2.])

해야 할 일 8 (10점)

아래 연산들의 결과를 적어라.

  1. a/b

    답안)
  2. a/b[:, np.newaxis]

    답안)
  3. 2a - b

    답안)
  4. b ** 2

    답안)
  5. a ** b

    답안)

문제 4

구간 [0, 1]에서 임의로 숫자를 뽑아 10 x 3 행렬 모양의 2차원 어레이를 아래와 같이 생성한다.


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]
해야 할 일 9 (10점)

min05 어레이가 임의로 생성된 10 x 3 어레이의 각 행별로 0.5로부터 가장 가까운 값을 갖는 이유를 설명하라.

답안)






.
해야 할 일 10 (10점)

임의로 생성된 10 x 3 어레이의 각 열별로 0.5로부터 가장 가까운 값들로 구성된 어레를 구현하는 코드를 작성하라.

답안)






.

In [6]:
from scipy import misc
import matplotlib.pylab as plt
%pylab inline


Populating the interactive namespace from numpy and matplotlib
WARNING: pylab import has clobbered these variables: ['plt']
`%matplotlib` prevents importing * from pylab and numpy

문제 5

아래 사이트에 가면 "Lena" 이름의 여성 사신에 대한 설명을 확인할 수 있다.

http://www.cs.cmu.edu/~chuck/lennapg/

위 사이트에서 확인되는 사진은 이미지 압축 알고리즘과 관련해서 가장 많이 사용되는 사진이다. 파이썬에서는 scipy 모듈에서 2차원 어레이 형식으로 Lena 사진 데이터를 제공한다.


In [7]:
lena = misc.lena()
lena


Out[7]:
array([[162, 162, 162, ..., 170, 155, 128],
       [162, 162, 162, ..., 170, 155, 128],
       [162, 162, 162, ..., 170, 155, 128],
       ..., 
       [ 43,  43,  50, ..., 104, 100,  98],
       [ 44,  44,  55, ..., 104, 105, 108],
       [ 44,  44,  55, ..., 104, 105, 108]])
  • 위 사진은 2차원 어레이 정보를 이용하여 흑백 사진으로 표현하고 싶으면 다음과 같이 할 수 있다.

In [8]:
plt.imshow(lena, cmap='gray')


Out[8]:
<matplotlib.image.AxesImage at 0x10852e590>
  • 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]
해야 할 일 11 (10점)

타원의 중심의 좌표가 (256, 256)이며 중점으로부터 x축, y축 방향으로의 최대 거리가 각각 230, 180인 타원 밖의 픽셀값을 0으로 갖는 마스크를 구현하라.

c = 230.0
d = 180.0

아래와 같이 실행결과가 나오도록 mask를 정의하라.

답안)




.

In [11]:
lena[mask]=0
plt.imshow(lena, cmap='gray')


Out[11]:
<matplotlib.image.AxesImage at 0x1085df390>

문제 6

1900년부터 1920년까지 캐나다 북부지역에서 산토끼, 스라소니, 당근의 개체수의 변화를 조사한 데이터가 아래와 같다.


In [12]:
data = np.loadtxt('../excs/data/populations.txt')
data


Out[12]:
array([[  1900.,  30000.,   4000.,  48300.],
       [  1901.,  47200.,   6100.,  48200.],
       [  1902.,  70200.,   9800.,  41500.],
       [  1903.,  77400.,  35200.,  38200.],
       [  1904.,  36300.,  59400.,  40600.],
       [  1905.,  20600.,  41700.,  39800.],
       [  1906.,  18100.,  19000.,  38600.],
       [  1907.,  21400.,  13000.,  42300.],
       [  1908.,  22000.,   8300.,  44500.],
       [  1909.,  25400.,   9100.,  42100.],
       [  1910.,  27100.,   7400.,  46000.],
       [  1911.,  40300.,   8000.,  46800.],
       [  1912.,  57000.,  12300.,  43800.],
       [  1913.,  76600.,  19500.,  40900.],
       [  1914.,  52300.,  45700.,  39400.],
       [  1915.,  19500.,  51100.,  39000.],
       [  1916.,  11200.,  29700.,  36700.],
       [  1917.,   7600.,  15800.,  41800.],
       [  1918.,  14600.,   9700.,  43300.],
       [  1919.,  16200.,  10100.,  41300.],
       [  1920.,  24700.,   8600.,  47300.]])

data는 2차원 어레이이며 모양은 (21,4) 이다.

.
해야 할 일 12 (5점)

20년 동안 산토끼와 스라소니 개체수의 평균을 구하는 코드를 작성하라.

답안)



.
해야 할 일 13 (10점)

각 종별로 가장 적은 개체수를 보였던 연도와 두 번째로 적었던 개체수를 보였던 연도를 구하는 코드를 작성하라.

답안)



.