강의자료 · 인공지능응용

배열을 읽고 그래프로 설명하기

본인 사본을 만들어 실행·수정·기록하세요.

1. 배열의 모양

먼저 원소가 12개인 배열로 shape와 원소 수를 확인합니다.

A. 기준 예제 · 먼저 읽고 실행

import numpy as np
import matplotlib.pyplot as plt
a = np.arange(1,13).reshape(3,4)
print(a, '\nshape:',a.shape,'ndim:',a.ndim,'size:',a.size)
print('second row:',a[1,:])
print('mask:',a>7,'selected:',a[a>7])

B. 직접 수행

  1. score=[728590689588]\mathrm{score}=\begin{bmatrix}72&85&90&68&95&88\end{bmatrix}을 NumPy Array로 만들고 shape·dtype·평균·80 이상인 값과 그 개수를 출력하세요.
  2. 1~20을 (4,5)로 만든 뒤 첫 행, 마지막 열, 가운데 2행×3열 구간, 짝수만 선택한 결과를 각각 출력하세요.

예상은 정확한 수치 대신 shape나 증가·감소 방향으로 적어도 됩니다. 코드는 위 예제를 참고해 작성하고, 설명만 묻는 항목은 아래 Text Cell에 답하세요.

# ✍ 직접 작성: 이 셀 아래에 본인의 코드를 추가하세요.
# 코드가 길어지면 Code Cell을 추가해도 됩니다.

C. 직접 기록 · 이 Text Cell을 더블클릭해서 수정

2. 연산과 검증

같은 위치의 원소를 곱하는 A*B와 행·열을 곱해 더하는 A@B를 계산해 비교합니다. 이어 A의 Inverse를 구하고, A@Inverse가 Identity가 되는지 확인합니다.

A. 기준 예제 · 먼저 읽고 실행

A=np.array([[2.,1.],[1.,3.]])
B=np.array([[1.,0.],[2.,1.]])
print('elementwise:',A*B,'matrix:',A@B)
print('inverse:',np.linalg.inv(A))
assert np.allclose(A@np.linalg.inv(A),np.eye(2))
values=np.array([3.,7.,5.]);print('max:',values.max(),'index:',values.argmax())

B. 직접 수행

  1. A=[2.01.01.03.0]A=\begin{bmatrix}2.0&1.0\\1.0&3.0\end{bmatrix}, B=[1.00.02.01.0]B=\begin{bmatrix}1.0&0.0\\2.0&1.0\end{bmatrix}에서 Element-wise Product와 Matrix Multiplication을 계산하고 (0,1) 원소가 만들어지는 과정을 설명하세요.
  2. A의 Determinant와 Inverse를 구하고 A@Inverse가 Identity인지 np.allclose로 검증하세요.
  3. A[0,0]을 4로 바꾸어 반복하세요.

예상은 정확한 수치 대신 shape나 증가·감소 방향으로 적어도 됩니다. 코드는 위 예제를 참고해 작성하고, 설명만 묻는 항목은 아래 Text Cell에 답하세요.

# ✍ 직접 작성: 이 셀 아래에 본인의 코드를 추가하세요.
# 코드가 길어지면 Code Cell을 추가해도 됩니다.

C. 직접 기록 · 이 Text Cell을 더블클릭해서 수정

3. 결과를 그래프로

최대 위치를 계산하여 그림에 표시합니다.

A. 기준 예제 · 먼저 읽고 실행

x=np.linspace(0,2*np.pi,100)
y=np.sin(x)
fig,ax=plt.subplots();ax.plot(x,y,label='sin(x)');i=y.argmax()
ax.annotate('sample maximum',(x[i],y[i]),xytext=(2,0.5),arrowprops={'arrowstyle':'->'})
ax.set(xlabel='x (rad)',ylabel='value',title='Sampled sine');ax.grid();ax.legend();plt.show()

B. 직접 수행

  1. x를 0~2π의 100개 표본으로 만들고 sin·cos를 같은 그래프에 표시하세요.
  2. 이어 epoch=[12345]\mathrm{epoch}=\begin{bmatrix}1&2&3&4&5\end{bmatrix}, loss=[1.81.20.90.70.6]\mathrm{loss}=\begin{bmatrix}1.8&1.2&0.9&0.7&0.6\end{bmatrix}, accuracy=[0.40.60.70.750.78]\mathrm{accuracy}=\begin{bmatrix}0.4&0.6&0.7&0.75&0.78\end{bmatrix}을 사용해 2×2 Figure에 sin, cos, Loss, Accuracy를 각각 표시하세요.
  3. 축·Legend를 쓰고 최대 Accuracy의 위치를 코드로 찾아 annotation으로 표시하세요.

예상은 정확한 수치 대신 shape나 증가·감소 방향으로 적어도 됩니다. 코드는 위 예제를 참고해 작성하고, 설명만 묻는 항목은 아래 Text Cell에 답하세요.

# ✍ 직접 작성: 이 셀 아래에 본인의 코드를 추가하세요.
# 코드가 길어지면 Code Cell을 추가해도 됩니다.

C. 직접 기록 · 이 Text Cell을 더블클릭해서 수정

반복 숙달 · 실행 전에 판단하기

앞의 직접 수행에서 비교한 조건 세 가지를 이 표에 정리하세요. 이미 수행한 실험을 다시 추가할 필요는 없습니다. 비교가 부족하면 한 조건만 바꾸어 보충하세요.

변경 조건 예상 shape/수치/결과 실제 결과 오류가 있었다면 원인
⟦직접 입력 1⟧ ⟦직접 입력⟧ ⟦직접 입력⟧ ⟦직접 입력⟧
⟦직접 입력 2⟧ ⟦직접 입력⟧ ⟦직접 입력⟧ ⟦직접 입력⟧
⟦직접 입력 3⟧ ⟦직접 입력⟧ ⟦직접 입력⟧ ⟦직접 입력⟧
# ✍ 반복 실험 코드

선택 실습 · 오류의 원인을 찾아 코드 고치기

원소 수가 맞지 않는 reshape

  1. NumPy를 import한 뒤, 노트북 맨 아래에 Code Cell을 추가하고 다음 코드를 실행하세요.

    debug_values = np.arange(12)
    for debug_shape in [(5, 3), (3, 4)]:
        print("requested shape:", debug_shape, "elements:", debug_values.size)
        try:
            print(debug_values.reshape(debug_shape))
        except ValueError as error:
            print(type(error).__name__, str(error))
  2. Text Cell에 요청한 shape별 필요한 원소 수와 실행 성공 여부를 표로 적으세요. 성공한 배열에서 0부터 11까지의 값이 어떤 순서로 배치되는지도 한 문장으로 설명하세요.

저장 전 확인

  1. 작성란과 출력·그래프를 확인하고 새 런타임에서 전체 셀을 순서대로 실행하세요.
  2. 본인 Drive에 저장한 뒤 .ipynb로 내려받으세요.

코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.

파일명: 이름_학번_3주차.ipynb.