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

어레이 ab가 다음과 같다.

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인 격자판을 다루기 위해서는 행과 열을 담당하는 어레이 xy를 다음과 같이 생성한다.


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

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

답안)



.