write up 적는거처럼 이렇게라도 해야 머리에 뭐라도 들어올거 같아서 뭐하는 코드인지 해석정도만 해볼거다
아마 내일 수행보고 글 지울지도 모르겠다
0320.py
M = np.array([
[1,1,0,1,0],
[1,0,0,1,1],
[1,1,0,1,0],
[0,0,1,0,0],
[0,0,1,1,1]
])
a = np.array([
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,1,0,0,0],
[0,1,0,0,0],
])
b = np.array([
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,1,0,0],
[0,0,0,0,0],
])
행렬 3개가 주어진다
단순히 행렬의 덧셈 뺄셈은
print(M + a - b)
위와 같이 표기하고
곱셈은 numpy에서 지원하는 @ 연산을 사용해 표기한다
a = np.array([[13,15,50], [13.5,20,60], [14,18,40],[12.8,13,30]])
w = np.array([0.4,0.3,0.3])
s = a@w
역행렬을 구하기 위해선 코드에서 두 가지 과정을 거친다
Routine 1
np.linalg.det() 함수의 인자로 행렬을 넣어 행렬식을 구한다
이 행렬식이 0이면 역행렬이 존재하지 않는다는걸 의미한다
Routine2
np.linalg.inv() 함수를 사용해 역행렬을 구할 수 있다. 역시 인자로 행렬을 받는다
0410.py
고윳값, 고유벡터, 고유분해를 구하는 과정을 다룬다
a = np.array([[0,3],[1,2]])
2x2 정사각행렬이 주어진다
nxn 정사각행렬은 최대 n개의 고유값과 각 고윳값에 대한 고유벡터 1개씩 (또는 그 이상)을 가지기에 여러개를 구할 수 있다
eigenVal, eigenVec = np.linalg.eig(a)
print('고윳값', eigenVal[0])
print('고유벡터', eigenVec[:, 0])
print('고윳값', eigenVal[1])
print('고유벡터', eigenVec[:, 1])
eigenVal[0]은 첫번째 행을, eigenVec[:, 0]은 첫번째 열을 가져온다
행렬의 대각화
import numpy as np
n=5
A = np.array([[0,3], [1,2]])
eigenVal, eigenVec = np.linalg.eig(A)
D = np.diag([eigenVal[1], eigenVal[0]])
P = np.column_stack((eigenVec[:, 1], eigenVec[:, 0]))
print('n이 %d일 때'%(n))
print('A :\n', A)
print('P :\n', P)
print('D^n : \n', D**n)
print('P Inv : \n', np.linalg.inv(P))
A=PDP**−1
A: 원래 행렬, D: 대각행렬, P: 고유벡터 행렬
n = 5: A의 5제곱을 구하고 싶음
고윳값을 대각행렬 D로 만듦
- 고유벡터들을 열벡터로 쌓아서 P 행렬 구성
- 순서를 D와 맞추기 위해 [:, 1] 먼저 넣음
- D^n: 대각행렬의 n제곱은 그냥 각 대각 원소만 n제곱하면 됨
- np.linalg.inv(P): P의 역행렬 (나중에 A^n 구할 때 필요)
0424.py
숫자모양으로 행렬 놓은거 축소해주는 합성곱 신경망인지 뭔지 설명할 때 나왔던 코드다
주석처리 열심히 했으므로 이 파트는 PoC로 퉁치겠다
import numpy as np
import matplotlib.pyplot as plt
seven = np.array([
[0,1,1,1,0],
[0,1,0,1,0],
[0,1,1,1,0],
[0,1,0,1,0],
[0,1,1,1,0]
])
# 3x3 필터
A = np.array([
[0,0,0],
[1,1,1],
[0,0,0]
])
# 필터 적용 결과값 담을 list
S = []
# 3x3 9개로 나눈 후 각각 M과 A를 행렬곱한 후 다 더함
for i in range(3):
for j in range(3):
M = seven[i : i + 3, j : j + 3]
S.append((M@A).sum())
# S는 총 9개의 값이므로 3x3 배열로 reshape
S = np.array(S).reshape(3,3)
# RGB로 시각화
imgData1 = np.zeros((5,5,3))
# 0인 부분 [1,1,1] 흰색 설정 나머지는 [0,0,0] 검은색
for i in range(len(seven)):
for j in range(len(seven[i])):
if not seven[i][j]:
imgData1[i][j] = [1,1,1]
# 필터 처리 후 S 시각화
imgData2 = np.zeros((3,3,3))
#S [i][j]가 0이 아니면 빨간색 채널을 사용해 강조 (강할수록 진한 빨강).
for i in range(len(S)):
for j in range(len(S[i])):
if S[i][j]:
imgData2[i][j] = [S[i][j] * 0.1, 0, 0]
else:
imgData2[i][j] = [1,1,1]
fig = plt.figure()
rows = 1
cols = 2
ax1 = fig.add_subplot(rows, cols, 1)
ax1.imshow(imgData1)
ax2 = fig.add_subplot(rows, cols, 2)
ax2.imshow(imgData2)
plt.show()
print(S)
0508.py
마지막인데 이건 내가 내일까지 다 이해하고 외울 자신이 없다
그냥 써놓기만 하겠다
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
import math
'''
stdA = (80 - 60) / 10
stdB = (90 - 80) / 20
print('수학점수 표준화 : %.2f, 영어점수 표준화 : %.2f' % (stdA, stdB))
if stdA > stdB:
print('수학점수가 높다')
else:
print('영어점수가 높다')
'''
Health = np.array([[176.5,1.2],[169.2,0.8],[180.3,0.1],[162.7,0.5]])
'''
# (1) 표준화 (standardization)
Health_std = np.copy(Health)
for i in range(Health.shape[1]):
avg = np.average(Health[:, i])
std = np.std(Health[:, i])
Health_std[:, i] = (Health_std[:, i] - avg) / std
print('표준화: \n', Health_std)
print()
# (2) 정규화 (normalization)
Health_norm = np.copy(Health)
for i in range(Health.shape[1]):
Health_norm[:, i] = Health_norm[:, i] - np.min(Health_norm[:, i])
Health_norm[:, i] = Health_norm[:, i] / np.max(Health_norm[:, i])
print('정규화: \n', Health_norm)
'''
'''
Health_std2 = StandardScaler().fit_transform(Health)
print('표준화(사이킷런 라이브러리) : \n', Health_std2)
print()
# (2) 정규화 - 사이킷런 라이브러리 활용
Health_norm2 = MinMaxScaler().fit_transform(Health)
print('정규화 (사이킷런 라이브러리) : \n', Health_norm2)
'''
'''
x = np.arrange(-3, 3, 0.2)
plt.axhlie(y=0, color='k')
plt.axhlie(x=0, color='k')
plt.xlim(-4, 4)
plt.ylim(-4, 4)
plt.plot(x, 2**x, 'r')
plt.plot(x, (1/2) ** x, 'y')
plt.plot(x, -2 ** x, 'g')
plt.show()
'''
x = np.arrange(-4,10,0.2)
y = np.log(x) / np.log(3)
y = np.array(y)
plt.axhline(y=0, color='k')
plt.axhline(x=0, color='k')
plt.xlim(-4, 10)
plt.ylim(-10, 10)
plt.plot(x, 3**x, 'g')
plt.text(2, 5, 'y=3**2')
plt.plot(x, y, 'r')
plt.text(9, 2.5, 'y=logx / log3')
plt.plot(x, x, 'k')
plt.text(6, 5, 'y=x')
plt.show()
모르겠다 그냥 졸리다 자고싶다 수행 날먹하고싶다
2025.5.15 후기: 수행에 코드는 하나도 안나왔다