반응형
3.1 2차원 벡터
a = [1,3]
b = [2,6]
plt.figure(figsize=(2.5,5))
plt.xlim(0, 3.5)
plt.ylim(0, 7)
plt.xticks(ticks=np.arange(0, 4, step=1))
plt.yticks(ticks=np.arange(0, 7, step=1))
plt.arrow(0, 0, a[0], a[1], width = 0.05,head_width = .2, head_length = .1, color = 'red', alpha = 0.3)
plt.arrow(0, 0, b[0], b[1], head_width = .1, head_length = .1, color = 'blue', alpha = 0.3)
plt.axhline(0, color='gray', alpha = 0.3)
plt.axvline(0, color='gray', alpha = 0.3)
plt.annotate('vector g',(1,3),fontsize = 13, color = 'red')
plt.annotate('vector h',(2,6),fontsize = 13, color = 'blue')
plt.title("Vector")
plt.grid()
plt.show()
- 행렬식이 0이므로 스팬 확장 못함.
- 스팬은 선임
- h와 g는 선형 종속임
- Rank = 1
- 선위에 선이 있음
3.2 3차원 벡터
l = [1,0,0]
m = [0,1,0]
n = [0,0,1]
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.quiver(0,0,0,l[0],l[1],l[2], color='r',label='l')
ax.quiver(0,0,0,m[0],m[1],m[2], color='b', label='m')
ax.quiver(0,0,0,n[0],n[1],n[2], color='g',label='n')
ax.legend()
plt.show()
- 행렬식이 0이 아니므로 스팬 확장 가능.
- 스팬은 R3 임
- l과 m,n 은 선형 독립임
- Rank = 3
- 선위에 선이 있음
3.3 Basis
plt.figure(figsize=(5,5))
plt.xlim(-2,2)
plt.ylim(-2,2)
plt.xticks(ticks=np.arange(-2, 3, step=1))
plt.yticks(ticks=np.arange(-2, 3, step=1))
plt.arrow(0, 0, 1, 0, linewidth = 3, head_width = .05, head_length = .05, color = 'b', alpha = 0.4)
plt.arrow(0, 0, 0, 1, linewidth = 3, head_width = .05, head_length = .05, color = 'r', alpha = 0.4)
plt.grid()
plt.show()
3.4 Orthogonality
fig, axes = plt.subplots(1, 3, figsize=(21,6.5))
for ax in range(3) :
axes[ax].set_xlim(-5,5); axes[ax].set_xticks(ticks=np.arange(-4, 5, step=1));
axes[ax].set_ylim(-5,5); axes[ax].set_yticks(ticks=np.arange(-4, 5, step=1))
axes[0].arrow(0, 0, 1, 3, linewidth = 3, head_width = .05, head_length = .05, color = 'b', alpha = 0.4)
axes[0].arrow(0, 0, -3, 1, linewidth = 3, head_width = .05, head_length = .05, color = 'r', alpha = 0.4)
axes[1].arrow(0, 0, -2, 4, linewidth = 3, head_width = .05, head_length = .05, color = 'b', alpha = 0.4)
axes[1].arrow(0, 0, 4,2, linewidth = 3, head_width = .05, head_length = .05, color = 'r', alpha = 0.4)
axes[2].arrow(0, 0, 4, 1, linewidth = 3, head_width = .05, head_length = .05, color = 'b', alpha = 0.4)
axes[2].arrow(0, 0, 1, -4, linewidth = 3, head_width = .05, head_length = .05, color = 'r', alpha = 0.4)
axes[0].grid();axes[1].grid();axes[2].grid();
plt.show()
dot을 했을 때 값이 0이어야 수직이 된다. (내적했을 때 투영한길이가 0이므로)
3.5 Projection
# V proj 구하기
v = [2, 7]
x = 8
y = 10
def myProjection(v):
v = np.array(v)
xy = np.array([x, y])
xy_norm = np.sqrt(sum(xy**2))
vprime = (np.dot(v, xy)/xy_norm**2)*xy
return vprime
vprime = myProjection(v)
vprime
# 시각화
plt.figure(figsize = (7,7))
plt.xlim(0,10)
plt.ylim(0,10)
plt.xticks(ticks=np.arange(0, 10, step=1))
plt.yticks(ticks=np.arange(0, 10, step=1))
vprime = myProjection(v)
vprime_norm = np.sqrt(sum(vprime**2))
axes = plt.gca()
plt.gca().set_aspect('equal')
x_vals = np.array(axes.get_xlim())
y_vals = x_vals
plt.arrow(0, 0, vprime[0], vprime[1],linestyle = '--', color = 'green')
plt.arrow(0, 0, v[0], v[1], linewidth = 3, head_width = .05, head_length = .05, color = 'b', alpha = 0.4)
plt.arrow(v[0], v[1],vprime[0]-v[0], vprime[1]-v[1], linewidth = 3, head_width = .05, head_length = .05, color = 'orange', alpha = 0.5)
plt.arrow(0, 0,x, y, linewidth = 3, head_width = .05, head_length = .05, color = 'red', alpha = 0.5)
plt.grid()
plt.show()
3.6 Unit Vector
f = np.array([4, 16, 7, 37, 0])
norm_f = np.sqrt(np.dot(f,f))
unit_f = f / norm_f
unit_f.round(2)
def get_norm (a):
norm_f = np.sqrt(np.dot(a,a))
return norm_f
print(f/get_norm(f))
반응형
'기본소양 > 선형대수학' 카테고리의 다른 글
파이썬으로 하는 선형대수학 (5. Dimensionality Reduction) (0) | 2021.01.19 |
---|---|
파이썬으로 하는 선형대수학 (4. 공분산과 상관계수) (0) | 2021.01.18 |
파이썬으로 하는 선형대수학 (1. 스칼라와 벡터 & 2. 매트릭스) (0) | 2021.01.18 |
[선형대수학] 차원을 왜 축소시키는가 (0) | 2021.01.15 |
[선형대수학] 공분산과 상관계수 ( 피어슨, 스피어만) (0) | 2021.01.14 |
댓글