기본 콘텐츠로 건너뛰기

[matplotlib]quiver()함수

random수 생성_random module

이 모듈(패키지)는 다양한 통계분포를 따르는 유사 랜덤수를 생성하는 함수들을 포함합니다이전에 부착된 패키지를 사용하기 위해서는
패키지이름.클래스이름.함수이름()
와 같이 사용한다고 했습니다물론 이 모듈을 사용하기 위해서는 이 모듈을 부착해야 합니다.
In [1]: import random
In [2] : random.random()
Out[2]: 0.3741780106878482
In [2] : random.random()
Out[3]: 0.8748210983554208
위의 결과와 같이 random.random() 함수는 0과 1사이의 값(0<x<=1, [1, 0) )에서 무작위로 1개의 수를 반환합니다경우에 따라서는 이 무작위로 선택된 수를 이후에도 사용해야 합니다이를 위해 그 선택된 수를 지정할 수 있는데 random.seed() 함수를 사용합니다무작위수으 인덱스와 같은 역할을 하는 것이지요.
In [3] : random.seed(1)
In [4] : random.random()
Out[4]: 0.13436424411240122
위의 경우 random.seed(1)하에서 작성된 무작위수는 위와 같은 수가 생성됩니다.
In [5] : random.seed(1)
In [6] : random.random()
Out[6]: 0.13436424411240122
random.range(시작간격함수는 시작과 끝을 지정한 범위에서는 지정된 간격으로 한 개의 정수형인 랜덤수를 추출합니다이 함수의 매개변수 중 간격은 정수이어야 하며 생략이 가능합니다주의해야할 점은 파이썬은 0부터 시작하면 범위로 지정된 모든 경우에서 마지막(수는 포함되지 않는다는 점입니다다음은 0과 10사이의(10은 포함되지 않습니다.) 무작위수를 추출하는 명령은 list comprehesion을 사용합니다.
In [7] : [random.randrange(0, 10) for i in range(10)]
Out[7]: [6, 0, 8, 3, 7, 7, 8, 3, 5, 3]
위의 코드 7에 사용된 list comprehension은 간단한 반복문을 사용하기 위한 특별한 함수구문입니다그 결과는 리스트로 반환됩니다.

[결과 반복문 (조건문)]

위 코드 7은 0과 10이전의 정수 사이에서 랜덤수 생성을 10번 반복하기 위한 명령이다이 list comprehension은 간단한 반복문 작성을 위해 사용하지만 반복문 다음에 조건문을 첨가할 수 있다.
In [8]: ['goog' for i in range(10) if random.randrange(0, 10) > 5]
Out[8]: ['goog', 'goog', 'goog', 'goog', 'goog']
random.randrange()와 유사한 함수로 random.randint(a, b)을 사용합니다이 함수는 범위 a<=x<=b사이의 임의의 정수 하나를 생성하는 것으로 범위에서 간격을 지정하지 않는 것이 random.randrange() 함수와의 차이입니다.
In [9]: random.randint(10, 20)
Out[9]: 12
다음으로 이 모듈에서 빈번히 사용되는 함수(메소드)로 random.choice()  random.choices()가 있습니다.
random.choice(객체)
객체중에서 임의의 원소 하나를 반환합니다.
In [10]: x=[random.randint(1, 100) for i in range(20)]
In [11]: print(x)
[65, 77, 63, 18, 96, 95, 82, 86, 74, 64, 51, 89, 66, 60, 49, 93, 15, 88, 76, 85]
In [12]: random.choice(x)
Out[12]: 74
In [13]: random.choice(x)
Out[13]: 66
random.choices(객체, weight=None, cum_weights=None, k=1)
매개변수 weight를 사용하여 객체 중 각 원소의 가중치를 지정할 수 있습니다예를들어 객체의 원소가 [‘a’, ‘b’, ‘c’] 일 경우 가중치를 [10, 5, 3]으로 지정하면 객체의 각 값이 추출될 상대 확률을 지정하는 것과 같습니다. cum_weights는 위의 가중치를 [10, 15, 18]로 표현하는 것입니다또는 k는 추출하는 개수를 지정하는 것입니다.
In [14]: random.choices(x, k=3)
Out[14]: [95, 49, 89]
In [15]: y=[random.random() for i in range(20)]
In [16]: random.choices(x, y, k=3)
Out[16]: [15, 93, 64]
random.sample(객체, k)는 random.choices()와 같습니다다만 가중치를 지정할 수 없습니다.
In [17]: random.sample(x, 5)
Out[17]: [15, 95, 74, 49, 65]
In [18]: random.sample(x, 5)
Out[18]: [89, 82, 85, 88, 86]
또한 sequence 객체의 순서를 임의적으로 바꾸어주는 함수로 random.shuffle(객체)를 사용합니다.
In [19]: print(x)
[48, 17, 8, 89, 96, 25, 55, 32, 48, 22, 21, 86, 81, 52, 33, 80, 24, 53, 73, 63] 
In [20]: random.shuffle(x)
In [21]: print(x)
[63, 89, 32, 53, 24, 33, 48, 81, 8, 73, 22, 86, 25, 52, 55, 17, 21, 96, 48, 80] 
In [22]: random.shuffle(x)
In [23]: print(x)

[96, 8, 17, 48, 81, 86, 73, 22, 52, 53, 48, 63, 89, 24, 55, 32, 25, 80, 33, 21]
임의의 수를 추출하기 위해 임의수는 정규분포를 따르는 집단에서 추출한다.”와 같이 가이드라인을 설정할 수 있습니다통계적으로 표현할 수 있는 분포는 다양하기 때문에 각각의 분포에 따라 그 값을 추출하도록 설정할 수 있는 것이지요다음 함수들은 기본적으로 위의 random() 함수와 같지만 추출하는 값들이 지정하는 분포가 정해진다는 차이가 있습니다

 5 통계분포에 따른 랜덤수 생성 함수
함수(random.--)
설명
uniform(a, b)
균일분포에서 a<=x<=b에서 실수 하나를 추출
Triangular(a, b, mode)
대칭분포에서 a<=x<=b에서 실수 하나를 추출. a, b는 각각 0, 1이 기본값이다. mode는 범위사이에 추출할 방식을 지정하는데 중간값이 기본이다.
betavariate(alpha, beta)
Beta 분포를 기준으로 한다이 분포의 모수인 alpha, beta를 인수로 지정하여야 하며 0, 1 사이에서 랜덤수 생성
expovariate(lambd)
지수분포, lambd는 지수분포의 매개변수
gammavariate(alpha, beta)
감마분포이 분포의 모수값 alpha, beta
gauss(mu, sigma)
가우스분포이 분포의 모수 평균과 표준편차
lognormvariate(mu, sigma)
로그노말 분포(평균표준편차)
normvariate(mu, sigma)
정규분포이 분포의 모수 평균과 표준편차
Weibullvariate(alpha, beta)
와이블 분포, alpha는 이 분포의 스케일이고 beta는 형태를 나타내는 모수이다.



댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같...

[sympy] Sympy객체의 표현을 위한 함수들

Sympy객체의 표현을 위한 함수들 General simplify(x): 식 x(sympy 객체)를 간단히 정리 합니다. import numpy as np from sympy import * x=symbols("x") a=sin(x)**2+cos(x)**2 a $\sin^{2}{\left(x \right)} + \cos^{2}{\left(x \right)}$ simplify(a) 1 simplify(b) $\frac{x^{3} + x^{2} - x - 1}{x^{2} + 2 x + 1}$ simplify(b) x - 1 c=gamma(x)/gamma(x-2) c $\frac{\Gamma\left(x\right)}{\Gamma\left(x - 2\right)}$ simplify(c) $\displaystyle \left(x - 2\right) \left(x - 1\right)$ 위의 예들 중 객체 c의 감마함수(gamma(x))는 확률분포 등 여러 부분에서 사용되는 표현식으로 다음과 같이 정의 됩니다. 감마함수는 음이 아닌 정수를 제외한 모든 수에서 정의됩니다. 식 1과 같이 자연수에서 감마함수는 factorial(!), 부동소수(양의 실수)인 경우 적분을 적용하여 계산합니다. $$\tag{식 1}\Gamma(n) =\begin{cases}(n-1)!& n:\text{자연수}\\\int^\infty_0x^{n-1}e^{-x}\,dx& n:\text{부동소수}\end{cases}$$ x=symbols('x') gamma(x).subs(x,4) $\displaystyle 6$ factorial 계산은 math.factorial() 함수를 사용할 수 있습니다. import math math.factorial(3) 6 a=gamma(x).subs(x,4.5) a.evalf(3) 11.6 simpilfy() 함수의 알고리즘은 식에서 공통사항을 찾아 정리하...

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 $x^2=1$의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. $$x^2-1=0$$ import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. $$\begin{aligned}x^2-1=0 \rightarrow (x+1)(x-1)=0 \\ x=1 \; \text{or}\; -1\end{aligned}$$ 예 $x^4=1$의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. $$x^4-1=(x^2+1)(x+1)(x-1)=0 \rightarrow x=\pm \sqrt{-1}, \; \pm 1=\pm i,\; \pm1$$ 실수...