기본 콘텐츠로 건너뛰기

라벨이 차원인 게시물 표시

[matplotlib]quiver()함수

[Linear Algebra] 급수(Rank)

급수(Rank) 선형결합에 의해 생성되는 부분 공간 W의 차원 은 그 공간을 구성하는 기저(Basis) 벡터 의 수 입니다. 그 기저 벡터의 수를 급수(rank) 라고 합니다. 예 1) 다음 동차 방정식의 급수(rank)를 결정해 봅니다. 3x 1 + 6x 2 - x 3 + x 4 + 7x 5 = 0 x 1 - 2x 2 + 2x 3 + 3x 4 - x 5 = 0 2x 1 - x 2 + 5x 3 + 8x 4 - 4x 5 = 0 v1=np.array([3, 1, 2]) v2=np.array([6, -2, -1]) v3=np.array([-1, 2, 5]) v4=np.array([1, 3, 8]) v5=np.array([7, -1, -4]) c=np.zeros(3) aug=np.c_[v1, v2, v3, v4, v5, c] print(aug) [[ 3 6 -1 1 7 0] [ 1 -2 2 3 -1 0] [ 2 -1 5 8 -4 0]] print(np.array(Matrix(aug).rref()[0], dtype=float).round(2)) [[ 1. 0. 0. 0.45 2.03 0. ] [ 0. 1. 0. 0.18 -0.12 0. ] [ 0. 0. 1. 1.45 -1.64 0. ]] 위 결과에 의하면 피벗열은 0, 1, 2열이므로 이 열에 대응되는 열벡터들은 기저벡터가 됩니다. 그러므로 식 1과 같이 나타낼 수 있는 선형 시스템들은 모두 선형 독립 관계가 성립합니다. \begin{align}&\text{system 1}:\; \begin{bmatrix}3&6&-1\\1&-2&2\\2&-1&5\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}1\\3\\8\end{bmatrix}\\ ...

[Linear Algebra] 영공간(Nullspace)

영공간(Null Space) 관련된 내용 열공간(column space) 선형 결합에서 독립인 경우 이 식의 해는 자명한 해로 유일한 해 집합을, 종속인 경우 1개 이상의 다양한 해집합을 가집니다. 선형종속의 다양한 해집합의 기저벡터들을 영공간(Nullspace) 이라 합니다. 즉, 다양한 해집합들 사이에 선형 독립인 결합을 생성할 수 있으며 이 결합의 기저벡터가 영공간이 됩니다. 열공간(Column space) 은 모든 선형결합에 포함되는 기저벡터들을 나타냅니다. m×n 형태의 2차원 행렬 A의 영공간(Nul A) 은 선형종속인 동차 선형 시스템(Ax = 0)의 모든 해집합의 기저입니다. 그러므로 해집합으로 생성되는 선형결합은 독립이어야 함을 의미합니다. 영공간은 선형종속인 동차 시스템의 해 집합의 기저입니다. 벡터 u가 행렬 A의 영 공간에 포함 여부를 결정한다는 것은 Ax = 0의 선형종속인 동차 선형 시스템에서 변수 벡터 x를 벡터 u로 치환할 경우 성립하는지를 결정하는 것입니다. A=np.array([[1,-3,-2],[-5, 9, 1]]); print(A) [[ 1 -3 -2] [-5 9 1]] 행렬 A로 생성되는 동차선형결합이 선형종속임을 확인합니다. b=np.zeros([2,1]) aug=np.c_[A, b] Matrix(aug).rref() (Matrix([ [1, 0, 2.5, 0], [0, 1, 1.5, 0]]), (0, 1)) 확대행렬의 rref에 자유변수의 존재는 선형종속임을 나타냅니다. 특정벡터 u를 x와 치환할 경우 성립여부를 확인합니다. u=np.array([5,3,-2]).reshape(-1,1); print(u) [[ 5] [ 3] [-2]] print(np.dot(A, u)) [[0] [0]] 위 결과에 의하면 벡터 u 는 식 1을 만족하는 해가 됩니다. u ⊂ Nul A (식 1) 예 1) 다음 표준 행렬 A의 영공간을 계산해봅니다. $$\begin{bma...

[Linear Algebra] 부분공간의 차원

부분공간의 차원 관련된 내용 벡터 공간과 부분공간 (vector space & subspace) 예 1) H가 4차원의 좌표(a, b, c, d)에서 다음 식들을 만족하는 모든 벡터들의 집합이라고 한다면 H가 4차원의 부분 공간인지를 확인합니다. \begin{align} a - 2b + 5c - d& = 0\\-a - b + c& = 0\end{align} 위 식은 식 1과 같이 행렬시스템으로 나타낼 수 있습니다. $$\begin{bmatrix} 1&-2&5&1\\-1&-1&1&0\end{bmatrix}\begin{bmatrix} a\\b\\c\\d\end{bmatrix} = \begin{bmatrix} 0\\0\end{bmatrix}$$ (식 1) A=np.array([[1,-2,5,-1],[-1, -1, 1, 0]]) c=np.zeros([2,1]) aug=np.hstack([A, c]) print(aug) [[ 1. -2. 5. -1. 0.] [-1. -1. 1. 0. 0.]] print(np.array(Matrix(aug).rref()[0], dtype=float).round(3)) [[ 1. 0. 1. -0.333 0. ] [ 0. 1. -2. 0.333 0. ]] 선형결합은 2개의 자유 변수 c, d를 포함하므로 자명하지 않은(non trivial) 해를 갖습니다. 즉, 선형 종속으로 선형 결합이 성립하므로 벡터 [[a], [b], [c], [d]]는 4차원의 부분 공간으로 간주할 수 있습니다. 그러나 변수 a, b는 c와 d에 의존적입니다. 이 경우 그 벡터의 차원을 차원을 4차원으로 고정할 수 있을까요? 표준 행렬 A의 각 열벡터 A 1 , A 2 , A 3 , A 4 라고 하면 위 rref의 결과로 A 1 , A 2 가 기저벡터로 나머지 벡터들인 A 3 , A 4...

[numpy] 차원(dimension)

차원(dimension) 차원은 임의의 점들을 나타내기 위해 필요한 축의 수로 정의할 수 있습니다. 다음 그림은 3차원까지를 나타냅니다. 한 개의 점(scalar)을 나타내기 위해서는 축이 필요하지 않습니다. 즉, 점은 0차원으로 정의합니다. 두점을 이은 선(vector)의 경우 두 점들을 한개의 축위에 나타내는 것으로 1차원으로 각 점 간의 거리를 나타낼 수 있으며 한 방향을 나타낼 수 있습니다. 두개의 선을 연결한 면(matrix)을 나타내기 위해서는 2개의 기본 축이 필요하므로 2차원으로 면적을 나타낼 수 있으며 두 방향을 나타낼수 있습니다. 두개의 면을 연결한 공간의 경우 3개의 기본 축하므로 3차원이 됩니다. 즉, 부피와 3개의 방향을 나타낼 수 있습니다. 3차원 이상의 경우는 tensor라는 용어로 나타냅니다. numpy 패키지의 기본 자료형인 array(배열)의 기본단위는 벡터이며 리스트 형태인 하나의 대괄호로 나타냅니다. 다음 객체 x는 한개의 숫자를 가지지만 벡터이므로 방향을 가집니다. 즉, 0에서 시작하여 2까지 이어지는 선을 나타냅니다. import numpy as np import numpy.linalg as la import matplotlib.pyplot as plt plt.rcParams['font.family'] ='NanumGothic' plt.rcParams['axes.unicode_minus'] =False x=np.array([2]) x array([2]) 벡터 x는 다음 그림 중의 하나로 나타낼 수 있습니다. 즉, 한개의 좌표가 필요하므로 1차원 벡터입니다. 그림 1. fig, ax=plt.subplots(1, 2, figsize=(4,2)) plt.subplots_adjust(wspace=0.3) ax[0].plot([0, 2], [0, 0], lw=2) ax[1].plot([0,0], [0,2], lw=2) plt.show() ...

[numpy] 배열의 차원 수정

배열의 차원 수정 배열의 차원을 수정하기 위해 reshape() 함수 또는 메서드 flatten(), ravel() 메서드, newaxis 의 속성을 사용할 수 있습니다. np.reshape(객체, shape), 객체.reshape(shape) 객체를 지정한 배열의 모양(shape)으로 변환 2차원 배열의 경우 인수 중 하나를 고정하고 다른 인수로 -1을 전달할 경우 자동으로 배분 import numpy as np x=np.random.randint(20, size=(3,4)) x array([[16, 5, 11, 6], [19, 19, 17, 14], [16, 16, 2, 4]]) print(x.reshape((2,6))) [[ 6 3 8 8 13 5]    [ 7 9 9 0 7 8]] print(np.reshape(x, (-1, 6))) [[16 5 11 6 19 19] [17 14 16 16 2 4]] print(x.reshape((6,-1))) [[16 5] [11 6] [19 19] [17 14] [16 16] [ 2 4]] print(x.reshape((4,3))) [[16 5 11] [ 6 19 19] [17 14 16] [16 2 4]] 다음 flatten() 과 ravel() 메서드는 다차원 배열을 1차원으로 전환합니다. x.flatten() array([ 6, 3, 8, 8, 13, 5, 7, 9, 9, 0, 7, 8]) x.ravel() array([ 6, 3, 8, 8, 13, 5, 7, 9, 9, 0, 7, 8]) 배열에 포함된 부분요소 또는 그 배열 자체의 차원을 증가시키기 위해서는 np.newaxis 속성을 적용합니다. 이 속성은 가장 근접한 차원에 새로운 축을 첨가 합니다. 객체[part 또는 all, np.newaxis] y=np...