배열을 읽고 그래프로 설명하기
본인 사본을 만들어 실행·수정·기록하세요.
- 이름: ⟦여기에 직접 입력⟧
- 학번: ⟦여기에 직접 입력⟧
- Code Cell 실행: ▶ 또는
Shift+Enter, 위에서부터 순서대로. - Text Cell 작성: 더블클릭 →
직접 입력작성 →Shift+Enter. - 직접 작성 셀: 본인 코드 입력.
- 값 변경 후: 해당 셀과 뒤의 관련 셀 다시 실행.
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. 직접 수행
- 을 NumPy Array로 만들고 shape·dtype·평균·80 이상인 값과 그 개수를 출력하세요.
- 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. 직접 수행
- , 에서 Element-wise Product와 Matrix Multiplication을 계산하고 (0,1) 원소가 만들어지는 과정을 설명하세요.
- A의 Determinant와 Inverse를 구하고
A@Inverse가 Identity인지np.allclose로 검증하세요. 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. 직접 수행
- x를 0~2π의 100개 표본으로 만들고 sin·cos를 같은 그래프에 표시하세요.
- 이어 , , 을 사용해 2×2 Figure에 sin, cos, Loss, Accuracy를 각각 표시하세요.
- 축·Legend를 쓰고 최대 Accuracy의 위치를 코드로 찾아 annotation으로 표시하세요.
예상은 정확한 수치 대신 shape나 증가·감소 방향으로 적어도 됩니다. 코드는 위 예제를 참고해 작성하고, 설명만 묻는 항목은 아래 Text Cell에 답하세요.
# ✍ 직접 작성: 이 셀 아래에 본인의 코드를 추가하세요.
# 코드가 길어지면 Code Cell을 추가해도 됩니다.
C. 직접 기록 · 이 Text Cell을 더블클릭해서 수정
- 확인하거나 바꾼 조건: ⟦직접 입력⟧
- 실행 전 예상: ⟦직접 입력⟧
- 실제 출력/그래프에서 확인한 값: ⟦직접 입력⟧
- 예상과 차이 및 설명: ⟦직접 입력⟧
반복 숙달 · 실행 전에 판단하기
앞의 직접 수행에서 비교한 조건 세 가지를 이 표에 정리하세요. 이미 수행한 실험을 다시 추가할 필요는 없습니다. 비교가 부족하면 한 조건만 바꾸어 보충하세요.
| 변경 조건 | 예상 shape/수치/결과 | 실제 결과 | 오류가 있었다면 원인 |
|---|---|---|---|
| ⟦직접 입력 1⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ |
| ⟦직접 입력 2⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ |
| ⟦직접 입력 3⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ | ⟦직접 입력⟧ |
# ✍ 반복 실험 코드
선택 실습 · 오류의 원인을 찾아 코드 고치기
원소 수가 맞지 않는 reshape
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))Text Cell에 요청한 shape별 필요한 원소 수와 실행 성공 여부를 표로 적으세요. 성공한 배열에서 0부터 11까지의 값이 어떤 순서로 배치되는지도 한 문장으로 설명하세요.
저장 전 확인
- 작성란과 출력·그래프를 확인하고 새 런타임에서 전체 셀을 순서대로 실행하세요.
- 본인 Drive에 저장한 뒤
.ipynb로 내려받으세요.
코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.
파일명: 이름_학번_3주차.ipynb.