기본 콘텐츠로 건너뛰기

라벨이 linearAlgebra인 게시물 표시

통계관련 함수와 메서드 사전

A B C d E F G H I K L M N O P Q R S T U V W Z A statsmodels.ap.stats.anova_lm(x) statsmodels.formula.api.ols 에 의해 생성되는 모형 즉, 클래스 인스턴스(x)를 인수로 받아 anova를 실행합니다. np.argsort(x, axis=-1, kind=None) 객체 x를 정렬할 경우 각 값에 대응하는 인덱스를 반환합니다. Axis는 기준 축을 지정하기 위한 매개변수로서 정렬의 방향을 조정할 수 있음(-1은 기본값으로 마지막 축) pandas.Series.autocorr(lag=1) lag에 전달한 지연수에 따른 값들 사이의 자기상관을 계산 B scipy.stats.bernoulli(x, p) 베르누이분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 p: 단일 시행에서의 확률 scipy.stats.binom(x, n, p) 이항분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 n: 총 시행횟수 p: 단일 시행에서의 확률 C scipy.stats.chi2.pdf(x, df, loc=0, scale=1) 카이제곱분포의 확률밀도함수를 계산 $$f(x, k) =\frac{1}{2^{\frac{k}{2}−1}Γ(\frac{k}{2})}x^{k−1}\exp\left(−\frac{x^2}{2}\right)$$ x: 확률변수 df: 자유도 pd.concat(objs, axis=0, join=’outer’, …) 두 개이상의 객체를 결합한 새로운 객체를 반환. objs: Series, DataFrame 객체. Axis=0은 행단위 즉, 열 방향으로 결합, Axis=1은 열단위 즉, 행 방향으

내적과 직교성

실질적인 해를 갖지 않는 모순된 시스템(inconsistent system)에 적당한 해를 찾기 위해 근사치에 대한 좋은 정의가 필요합니다. 이를 위해 벡터 공간에 거리와 정규성(orthogonality)의 개념을 도입할 것입니다. 이 정규성은 벡터 공간 W의 밖에 놓여 있는 어떤 점 y에 가장 근접한 W내의 점을 찾기 위해 이용됩니다. 이를 위해 모순된 선형 시스템을 위한 적절한(최소자승, least square)  해들을 찾기 위한 방법을 모색할 것입니다.  내적(inner product) $R^n$차원의 두 벡터 u, v에서 $u^T\cdot v$의 결과는 scalar입니다. 이것을 내적이라고 합니다. $$\left[\begin{array}{rrrr}u_1&u_2&\cdot&u_n\end{array}\right] \left[\begin{array}{r}v_1\\v_2\\\vdots\\n_n\end{array}\right] =u_1v_1+u_2v_2+ \cdots + u_nv_n$$ python에서 numpy.dot(x, y)를 사용하여 계산합니다. 이 값의 양의 제곱근이 내적이 됩니다. 또는 linalg.norm()을 사용하면 직접적으로 내적값을 계산할 수 있습니다. >>> import numpy as np >>> from sympy import * >>> import numpy.linalg as LA 1. 벡터 u, v에 대해 u•v, v•u? $$u=\left[\begin{array}{r}2\\-5\\-1\end{array}\right], \; v=\left[\begin{array}{r}3\\2\\-3\end{array}\right]$$ >>> u=np.mat("2;-5;-1"); u matrix([[ 2],         [-5],         [-1]]) >>> v=np.mat("3;2

기저의 변경

기저는 벡터공간 V에서 어떤 선형결합 시스템을 표현할 수 있는 가장 간단한 벡터를 의미합니다. 그러므로 일반적인 좌표시스템에서 좌표는 기저( 좌표벡터 )를 기준으로하여 다른 좌표값으로 나타낼 수 있습니다. 이것은 동일한 좌표를 다른 좌표벡터를 기준으로 다르게 나타낼 수 있음을 의미합니다. >>> import numpy as np >>> from sympy import * >>> import scipy.linalg as LA 1. 두개의 기저공간 B, C를 사용하여 일반좌표계에서 벡터 <1, 5>에 대한 $[X]_B$와 $[X]_C$? $$B=\left\{\left[\begin{array}{r}1\\1\end{array}\right],\; \left[\begin{array}{r}1\\-1\end{array}\right] \right\}$$ $$C=\left\{\left[\begin{array}{r}2\\-1\end{array}\right],\; \left[\begin{array}{r}-1\\1\end{array}\right] \right\}$$ $[X]_B$: Bx=y에 대한 해공간 $[X]_C$: Cx=y에 대한 해공간 >>> B=np.mat("1,1;1,-1"); B matrix([[ 1,  1],         [ 1, -1]]) >>> C=np.mat("2,-1; -1,1");C matrix([[ 2, -1],         [-1,  1]]) >>> y=np.mat("1; 5");y matrix([[1],         [5]]) >>> LA.solve(B, y) array([[ 3.],        [-2.]]) >>> LA.solve(C, y) array([[  6.],        [ 11.]]) 결과로부터

행렬식

행렬식 정방행렬에서 계산되는 행렬식(determinant)은   연립방정식의 해의 존재 여부를 판단하기 위해 시작되었으며   행렬의 열벡터로 부터 생성되는 도형의 면적이나 부피를 나타내기 위해 사용합니다. 행렬식(determinant)의 계산은 python의 numpy 또는 scipy 모듈의 함수를 사용하여 계산할 수 있습니다. <span style="background-color: #f6b26b;"><br /></span><span style="background-color: white;">&amp; 다음 두 행렬을 사용하여 다음을 검사해봅니다.<br /> numpy.linalg.det(x)(=np.linalg.det(x)) scipy.linalg.det(x)(or LA.det(x)) 행렬 A, B모두 n$\times$n 정방행렬이면 다음이 성립합니다. det AB=(det A)(det B) 다음 두 행렬을 사용하여 다음을 검사해봅니다. import numpy as np import numpy.linag as la A=np.mat("6,1;3,2"); A        matrix([[6, 1],         [3, 2]]) detA=la.det(A); np.around(detA, 3)        9.0 B=np.mat("4,3;1,2"); B        matrix([[4, 3],        [1, 2]]) detB=la.det(B); np.round(detB, 3)        5.0 np.allclose(detA*detB, la.det(np.dot(A, B)))        True 행렬곱에서는 성립되지만 덧셈의 경우는 성립되지 않습니다. det A + det B ≠ det AB A_B=A+B; A_B        matrix([[10,  4],  

행렬변환의 응용

>>> import numpy as np >>> import scipy.linalg as LA >>> from sympy import * >>> import matplotlib.pyplot as plt 1. 다음은 N 모양을 좌표로 인식하여 작성된 행렬입니다. >>> x=np.array([0, 0.5, 0.5, 6, 6, 5.5, 5.5, 0]).reshape(1,8) >>> y=np.array([0,0,6.42, 0, 8,8,1.58,8]).reshape(1,8) >>> D=np.r_[x, y];D array([[ 0.  ,  0.5 ,  0.5 ,  6.  ,  6.  ,  5.5 ,  5.5 ,  0.  ],        [ 0.  ,  0.  ,  6.42,  0.  ,  8.  ,  8.  ,  1.58,  8.  ]]) 위의 좌표를 그래프로 그리면 다음과 같습니다. 위 그래프의 작성 코드는 다음과 같습니다. id=[[7,0], [2,1], [1,0], [3,2], [6, 7], [5,6], [4,3], [4,5]] plt.figure(figsize=(10, 5)) plt.xlim(-1, 10) plt.ylim(-1,15) for i in id:     plt.arrow(D[0,i[0]], D[1,i[0]], D[0,i[1]]-D[0,i[0]], D[1,i[1]]-D[1,i[0]]) plt.savefig("C:\\ubuntu_docu\\선형대수\\blogFig\\trans1.png" ) plt.show() 위의 N 형태의 변형에 대한 그래프를 작성하기 위해 함수로 작성하여 사용합니다. def NplotS(M, path):     id=[[7,0], [2,1], [1,0], [3,2], [6, 7], [5,6], [4,3], [4,5]]     plt.figure(figsize=(

행렬 연산

행렬 A, B, C, 항등행렬 I, 스칼라 r, s 사이에서의 연산  A+B=B+A,   (A+B)+C=A+(B+C),  A+0=A r(A+B)=rA+rB,  (r+s)A=rA+sA,   r(sA)=(rs)A A(BC) =(AB)C,   A(B+C)=AB+AC,  (B+C)A=BA+CA r(AB)=(rA)B=A(rC),  IA=AI=A >>> import numpy as np >>> import scipy.linalg as LA >>> from sympy import * 1.행렬 A,B,C에서의 연산 >>> A=np.mat("4,0,5;-1,3,2");A matrix([[ 4,  0,  5],         [-1,  3,  2]]) >>> B=np.mat("1,1,1; 3,5,7");B matrix([[1, 1, 1],         [3, 5, 7]]) >>> C=np.mat("2,-3; 0,1");C matrix([[ 2, -3],         [ 0,  1]]) >>> A+B matrix([[5, 1, 6],         [2, 8, 9]]) >>> try: ...     A+C ... except: ...     print("행렬의 사칙연산은 동일한 차원에서 실행됩니다.") ... 행렬의 사칙연산은 동일한 차원에서 실행됩니다. >>> 2*B matrix([[ 2,  2,  2],         [ 6, 10, 14]]) >>> A-2*B matrix([[  2,  -2,   3],         [ -7,  -7, -12]]) 행렬곱 두 행렬 m$\times$n차원의 A와 n$\times$p차원의 B사이의 행렬곱 AB=A[$b_1, b_2, ..., b

행렬변환

이 포스트는 선형변환의 연속으로 선형대수의 필수적인 부분입니다. 우선 몇가지 용어를 살펴볼까요. 벡터는 한개의 열, 또는 행으로 값들을 정리한 형태로 표시됩니다. 하나의 열인 경우를 열벡터, 다른 경우를 행 벡터라 하고 별도의 표현이 없다면 열벡터를 의미합니다. 열벡터에서 한개의 행을 그래프로 작성하면 하나의 축에만 표시됩니다. 즉, 선인 1차원이지요, 두개이면 x, y 축이 필요하므로 2차원이됩니다. 이렇듯 열벡터의 행의 수는 그 벡터의 차원을 나타냅니다. 이를 총괄하여 다음과 같이 나타냅니다. 1차원의 경우 : $R^1$ 2차원 : $R^2$ ... n 차원 : $R^n \rightarrow \left[\begin{array}{rrrr} x_1 \\x_2 \\ \vdots \\x_n \end{array} \right]$ 벡터의 각 차원의 값만을 표현하기 위해 표준기저벡터(standard basis vector)를 사용합니다. 즉, 3차원 열벡터는 다음과 같이 표준기저벡터를 사용하여 나타낼 수 있습니다. $\left[\begin{array}{rrr} x \\ y \\ z \end{array} \right]=x\left[\begin{array}{rrr} 1 \\ 0 \\ 0 \end{array} \right]+y\left[\begin{array}{rrr} 0 \\ 1 \\ 0 \end{array} \right]+z\left[\begin{array}{rrr} 0 \\ 0 \\ 1 \end{array} \right]=x e_1 + y e_2 +z e_3$ 선형변환의 특성에서 소개하였듯이 선형대수에서 변환(transformation)은 정의역 의 어떤 차원의 벡터를 동일한 또는 다른 차원의 벡터로 변형시키는 함수를 의미합니다. 이 정의를 수학적으로 표현하면 다음과 같지요. $T_A: R^n \rightarrow R^m, \quad T_A (x) w$ 즉, 행렬 A에 의해 n차원 공간의 x를 m차원 공간의 w에 대응시키는 것입니다. 3 $\

선형변환 행렬의 종류 (ing)

1. isometry(Euvlid isometry) 동일한 차원으로 선형변환후 길이가 보존되는 성질을 가지는 선형변환  $T: R^n \rightarrow R^n$ 에서 ||T(x)|| = ||x|| 이러한 관계에 있는 선형변환의 경우 아래와 같은 의미를 가집니다. T(x) $\cdot$ T(y) = x $\cdot$ y, (x, y $\in R^n$) 2. 직교행렬(orthogonal matrix)  정방행렬 A에 대해 역행렬과 전치행렬이 같은 행렬 즉, $A^{-1} = A^T$ 의 조건을 만족하면 직교행렬입니다. (즉, 행렬을 구성하는 각 열벡터가 직교한다는 의미입니다.) 어떤 벡터를 일정한 각도로 이동시키는 선형변환을 위한 표준행렬 은 다음과 같습니다. $R_\theta = \left[\begin{array}{rr} cos(\theta) & - sin(\theta) \\ sin(\theta) & cos(\theta) \end{array} \right]$$ 이 표준행렬의 역행렬은 다음과 같습니다.  $R_\theta = \left[\begin{array}{rr} cos(\theta) & sin(\theta) \\ -sin(\theta) & cos(\theta) \end{array} \right]$$ theta=45 A=np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]]) A [Ans] :array([[ 0.52532199, -0.85090352], [ 0.85090352, 0.52532199]]) np.linalg.inv(A) #=A의 역행렬 [Ans] :array([[ 0.52532199, 0.85090352], [-0.85090352, 0.52532199]]) A.T [Ans]: array([[ 0.52532199, 0.85090352],

선형대수 용어 정리 (ing)

선형대수의 변환(transformation)은 함수(function)를 의미합니다. 그러면 함수란 무엇일까요? 어떤 객체에 대해 한개이상의 연산 과정을 실시하여 다른 결과를 반환하는 연산의 모둠이라고 할 수 있겠지요. 그러면 함수를 중심으로 대응되는 부분이 존재하겠지요. 즉, x1이라는 인자를 투입하면 y1이라는 결과가 나오고 또는 y1, y2,... 등 다중의 결과를 반환할 수도 있습니다. 이러한 상황을 일정한 용어로 정의 할 필요가 있습니다. 위의 과정을 요약해 보면 다음과 같이 나타낼 수 있습니다.  1.사상(mapping, Function) 입력(X) ---> 함수(f) ---> 출력(Y) 위을 수학적으로 다음과 같이 나타냅니다.  $ f: x \rightarrow y $, 또는  y=f(x) 위 관계를 함수라는 용어 대신 사상이라는 용어로  "집합 X에서 집합 Y로의 사상(함수)"이라고 표현합니다.  2. 상(Image) 위의 입력 X를 함수에 적용되면 입력값에 대응되는 Y가 반환되지요. 그 함수에 대응하여 반환되는 각각의 결과를 상(image)라고 합니다.  3. 정의역(domain), 공역(codomain), 치역(range)  상을 나타내기 위한 모든 입력 집합을 정의역이라고 합니다.  또한 함수의해 생성될 가능성이 있는 모든 부분을 공역이라하며 함수에 의해 생성되는 결과들의 집합을 치역이라고 합니다. 그러므로 공역과 치역($y_i$ i=...-1, 0, 1,...)을 같을 수가 있습니다. 즉, 다음의 관계가 성립되지요.  $ y_i \subseteq Y$ 4. 핵(kernel) $T: R^n \rightarrow R^n$의 선형변환에서 즉, 함수 T에 의해 정의역에 대한 상이 0이 되는 전체 집합을 T의 핵(kernel)이라 하며 kerT로 나타냅니다. $kerT = \{ v \in R^n | T(v) =0 \}$  다음예를

고유값과 고유벡터, eigendecomposition

$n \times n$정방행렬 A에 대해 다음의 방정식이 만족되는 경우를 생각할 수 있습니다.  $A \cdot v = \lambda \cdot v$ (1) v : $n \times 1$인 벡터 $\lambda$ : 스칼라 위 방정식의 어떤 해(solution)인 $\lambda$를 고유값(eigenvalue)라고 하며 특성값(characteristic value)이라고도 합니다. 이 고유값에 해당하는 벡터 v를 고유벡터(eigenvector)라고 합니다. 위 방정식은 다음과 같이 나타낼 수 있지요. $A \cdot v - \lambda \cdot v=0$ (2) $A \cdot v - \lambda \cdot I \cdot v=0$ (3) $(A - \lambda \cdot I )\cdot v=0$ (4) v가 0이 아닌 벡터라면 위 식에서 다음이 만족되어야만 합니다. $|A-\lambda \cdot I|=0$ (5) 이 식을 A의 특성방정식(character equation)이라고 하며 n개의 근을 가지는 n차 다항식이 됩니다. 이 근들은 A의 고유값이 됩니다. 다음의 2x2의 행렬을 예로 고유값과 고유벡터를 계산해 봅니다. a=np.matrix('0,1;-2, -3') a Out[128]: matrix([[ 0,  1],         [-2, -3]]) 위 행렬의 특성 방정식은 다음과 같습니다. $|A- \lambda \cdot I|= \left | \left [\begin{array}{rr} 0&1\\-2&-3 \end{array}\right] -\left[\begin{array}{rr}\lambda & 0 \\ 0 & \lambda \end{array} \right] \right |=0$ 위 식은 다음과 같이 정리 할 수 있습니다. $\left | \left[\begin{array}{rr} -\lambda &1 \\ -2 & -3-\lambda \end