기본 콘텐츠로 건너뛰기

라벨이 파이썬인 게시물 표시

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

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은 열단위 즉, 행 방향으

Sympy객체의 단순화

Simplification(단순화) General simplify sympy의 가장 유용한 특징중의 하나는 수학적 표현을 간단히 하는 기능입니다. 이를 위해 simplify() 함수를 사용합니다. simplify(x): 식 x를 간단히 정리 합니다. x=symbols("x") simplify(sin(x)**2+cos(x)**2)       1 simplify((x**3+x**2-x-1)/(x**2+2*x+1))       x - 1 simplify(gamma(x)/gamma(x-2))       (x - 2)*(x - 1) 위의 예는 식들 사이의 연산에 의한 간략화 된 형태의 식을 반환합니다. 3번째에서 나타낸 특수한 식인 감마함수(gamma(x))에 대해 소개합니다. 이 식은 확률분포 등 여러 부분에서 사용되는 표현식으로 다음과 같이 정의 됩니다. $$\Gamma(n) =(n-1)!$$ gamma(x).subs(x,4)       6 이 감마함수는 음이 아닌 정수를 제외한 모든 수에서 정의됩니다. 그러나 factorial(!)을 사용하는 경우 정의상 부동소수에서는 계산이 어렵지요. 이 경우는 다음과 같이 정의된 형태를 사용합니다. $$\Gamma(z)=\int^\infty_0 x^{z-1}e^{-x} dx$$ gamma(x).subs(x,4.5)       11.6317283965674 사용된 simplify()함수는 식의 연산 결과로 복잡한 식들을 간단한 형태로 정리하지만 연산이 아닌 하나의 식을 더 정리하는데는 제한됩니다. 즉, 다음 식은 인수분해를 통해 간략화 할 수 있습니다. $$ x^2+2x+1 \rightarrow (x+1)^2$$ 그러나 simplify() 함수는 위와 같은 결과를 반환하지 않습니다. simpilfy()함수는 공통사항을 찾아 그 부분에 대한 정리를 기본으로 합니다. simplify(x**2+2*x+1)       x**2 + 2*x +

Sympy Introduction

개요 Symbolic 계산 은 심벌로 이루어진 수학적 객체의 계산을 다룹니다 .  즉, 특정한 값이 전달되지 않은 변수들을 심벌로 표현하는 수학식을 나타낼 수 있다는 것을 의미합니다.  9 의 제곱근은 3 인 정확한 수입니다 . >>> import math >>> math.sqrt(9) 3.0 >>> 9**0.5 3.0 >>> pow(9, 0.5) 3.0 그러나 8 의 제곱근은 다음과 같이 근사값이 반환되지요 . >>> math.sqrt(8) 2.8284271247461903 이러한 경우 sympy 모듈의 함수를 사용하면 정확히 반환되는 부분외의 다른 부분은 심벌을 사용하여 나타냅니다 . 즉 , $\sqrt{8}=2 \sqrt{2}$ 의 형태로 나타냅니다 . >>> from sympy import * >>> sqrt(8) 2*sqrt(2) 보다 정확한 표현을 위해 일정한 기호 ( 심벌 ) 을 사용하는 방식으로 다양한 변수들의 표현에 사용됩니다 .  이러한 수학적 표현을 형성하기 위해서는 일반적으로 문자로 인식되는 x, y등을 문자가 아닌 수학적 심벌(기호)로 사용한다는 것을 symbols() 를 사용하여 미리 선언합니다.  from sympy import symbol >>> x, y=symbols('x y')#x,y는 문자가 아닌 심벌임을 선언  >>> x x >>> y y >>> expr=x+2*y >>> expr x + 2*y >>> type(x) <class 'sympy.core.symbol.Symbol'> 위에서 expr 객체는 심벌 x, y 를 지닌 객체이며 이 객체들과 심벌들 사

기저의 변경

기저는 벡터공간 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.]]) 결과로부터

선형독립과 기저

내용 기저 벡터 표준기저(Standard basis) 선형 독립과 기저 기저(Basis) 기저는 선형 결합에서 선형 독립 을 이루는 벡터들입니다. 즉, 선형 결합의 결과 벡터를 생성하기 위한 기본이 되는 벡터를 의미합니다. 벡터들의 집합을 벡터 공간이라고 하였습니다. 그 공간에서 두 개 이상의 벡터는 선형 결합으로 그 공간 내에 존재하는 부분 공간 을 만들어 낼 수 있습니다. 이러한 공간의 기본은 선형 독립인 벡터들입니다. 선형 독립 시스템에서의 결과 벡터는 이 기저 벡터들의 방향, 차원 등의 특성을 가진 형태로 그 벡터 공간의 부분 공간이 됩니다. 즉, 기저는 그 부분 공간을 나타내기 위한 기본 축이 될 수 있습니다. 이러한 기저 벡터들은 다음 조건을 만족해야 합니다. 기저 벡터 벡터 H가 벡터 공간 B(b 1 , b 2 , … , b p )의 부분공간인 경우 B = {b 1 , b 2 , … , b p }는 H의 기저(basis)입니다. ⇔ H와 B는 선형 독립: 벡터 공간에서 기저는 선형 독립인 벡터들입니다. ⇔ H = Span{b 1 , b 2 , … , b p } 즉, 집합 B의 벡터들은 H의 부분 공간이며 선형결합이 성립됩니다. 결과적으로 벡터 B 집합은 H(부분공간)의 스판이 되며 B의 선형 결합에 의한 결과 벡터가 H가 된다는 것을 의미합니다. 또한 이 선형결합은 독립이어야 하므로 자명한 해(유일해) 를 가져야 합니다. 표준기저(Standard basis) 항등 행렬의 각 열 벡터는 동일한 차원의 모든 벡터에 대해 스판이며 선형 독립입니다. 예를 들어 3차원의 항등 행렬의 경우 그 행렬에 의한 동차 선형 결합 의 해집합은 0벡터입니다. 즉, 항등 행렬의 선형 결합은 자명한 해를 가지므로 선형 독립입니다. 또한 이 시스템의 표준 행렬 은 정방 행렬이고 독립이기 때문에 0이 아닌 행렬식을 가집니다. import numpy as np import numpy.linalg as

행렬식

행렬식 정방행렬에서 계산되는 행렬식(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