import numpy as np
x = np.array( [
[1,2,3,4,5,6],
[6,5,4,3,2,1],
[11,12,13,14,15,16],
[76,75,74,73,72,71],
[86,85,84,83,82,81],
[96,95,94,93,92,91]
] )
print('diag 결과\n', np.diag(x))
대각합을 구하는데 사용하는 합수
2차원 배열의 경우
import numpy as np
y = np.arange(16).reshape(4,4) # 4행* 4열
print(y)
print()
# trace는 대각값들 더하기
print(f'첫번째 trace() = {np.trace(y)}')
z = np.arange(27).reshape(3,3,3)
print(z)
print(f'두번째 trace() = {np.trace(z)}') # [36 39 42]
trace(z) = [(0 + 12 + 24) (1 + 13 + 25) (2 + 14 + 16)] = [36 39 42]
import numpy as np
import time
def myEST(x,y):
ret = x*10 + y
return ret
print('일반함수 = ',myEST(3,7))
print( np.fromfunction(myEST,(3,7), dtype=int)) # 3 * 7열
print()
print('일반함수 = ', myEST(5,6))
print( np.fromfunction(myEST,(3,7), dtype=int) )
print()
import numpy as np
import time
dt = np.arange(1, 11)
print(dt)
# 배열 안의 순서를 랜덤으로 섞음
np.random.shuffle(dt) # 리턴값을 부여하면 none이 나옴
print(dt)
print('=' * 30)
data = np.arange(1, 11)
print(data)
print(np.random.permutation(data))
print(data) # 원본값을 유지
# concatenate() 데이터 연결
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
ret1 = np.concatenate((a, b), axis = 0 ) # axis = 0성공
print(ret1)
print()
# trace()를 이용 가능
ret2 = np.concatenate((a, b.T), axis=1)
print(ret2) #출력결과 [ [1 2 5] [3 4 6] ]
print()
배열의 축(axis)
축은 n차원 배열을 구성하는 요소
axis = n은 바깥부터 안쪽 리스트 순으로 0부터 이름을 붙인 것
1차원 배열은 축이 1개, 2차원 배열은 축이 2개 3차원 배열은 축이 3개임
1차원 배열에서는 axis 0 = 축
2차원 배열에서는 axis 0 = 행 axis 1 = 열
3차원 배열에서는 axis 0 = 층 axis 1 = 행 axis 2 = 열
import numpy as np
a = np.array([[1,2], [3,4]])
ret = np.linalg.det(a)
print(ret)
역행렬(Inverse Matrix)이란?
행렬 A, B가 각각 n*n행렬일때, AB = BA = I(항등행렬)인 행렬 B가 존재할때 A는 가역적 이라하고, AB = BA = I가 성립하는 하나뿐인 행렬 B를 A의 역행렬 이라함
이때 로 나타내는데
가 항상 성립함
import numpy as np
print('역행렬 실습')
a = np.array([[1,2], [3, 4]])
ret = np.linalg.inv(a)
print(ret)
자주 사용하는 선형 대수 함수
단위행렬(Unit matrix): np.eye(n)
영행렬(Zaro matrix): np.zero((m, n))
대각행렬(Diagonal matrix): np.diag(x)
전치행렬(Transpose matrix): np.T, np.transpose(a)
내적(Dot product, inner product): np.dot(a, b)
대각합(trace): np.trace(x)
행렬식(Matrix Determinant): np.linalg.det(x)
역행렬(Inverse of a matrix): np.linalg.inv(x)
고유값(Eigenvalue), 고유백터(Eigenvector): w, v = np.linalg.eig(x)
특잇값 분해(Singular Value Decomposition): u, s, vh = np.linalg.svd(A)
연립방정식 해 풀기: np.linalg.solve(a, b)
최소자승 해 풀기: m, c = np.linalg.lstsq(A, y, rcond=None)
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname='C:/Windows/Fonts/malgun.ttf').get_name()
rc('font', family=font_name)
import numpy as np
# 1단계 총합계, 평균 구하기
x = [2, 4, 6, 8, 10] #총합계 30 /5 평균 6시간
y = [81, 93, 91, 97, 98] #총합계 460 /5 평균 92점
# 다항식 회귀 분석을 수행함
su = np.polyfit(x, y, 1)
print('결과', su) # 결과 [ 1.9 80.6]
# 단계2 선형회귀 공식 y = w가중치 * 시간 + b편향
y_pred = np.array(x)*su[0] + su[1]
print(y_pred) # 예측값 [84.4 88.2 92. 95.8 99.6]
print()
# 단계 3
plt.plot(x, y_pred, color='hotpink') #예상=예측값
plt.scatter(x, y, color='red') #실제값
plt.plot(x,y) #line기본모양
for i,v in enumerate(x):
plt.text(v, y[i], y[i], fontsize=12, color='blue',
horizontalalignment='left',
verticalalignment='bottom'
)
plt.title('시간투자 성적점수 선형회귀 EST')
plt.xlabel('공부시간 est')
plt.ylabel('시험점수 est')
plt.show()
print('시각화 작업 확인 ')
>선형대수 및 선형회귀 모델 같은 경우 좀더 공부 및 정리 할 필요가 있음