Numpy 퇴장? ! Sympy로 행렬을 편미분
업데이트 내역
2020.4.28. 가필: 스칼라 함수를 벡터로 미분
소개
안녕하세요, 노인 기술자입니다.
제 시대는 아직 끝나지 않습니다.
하지만 행렬 연산이라고 하면 Numpy라고 하는 시대는 끝난 것 같습니다.
그 이름도 Sympy (설마 신 py가 아니라고 생각한다)!
Sympy로 행렬을 편미분이라든지 여러가지
우선 이런 일을 할 수 있다.
#%%
import sympy as sym
from IPython.display import Math, display
# 変数を定義
(x, y, p, q) = sym.symbols("x y p q")
# 行列を定義
A = sym.Matrix([
[x,2*x,3*x],
[4*x,5*x,6*x]
])
display((Math(f"A={sym.latex(A)}")))
B = sym.Matrix([
[y,y],
[4*y,5*y],
[7*y,y]
])
display((Math(f"B={sym.latex(B)}")))
# ベクトル関数を定義
xy = sym.Matrix([
[x,y]
])
display((Math(f"xy={sym.latex(xy)}")))
pq = sym.Matrix([
[3*x*y,2*x+y]
])
display((Math(f"pq={sym.latex(pq)}")))
# スカラー関数を定義
f = x**2
#行列同士の掛け算
C = A * B
display((Math(f"C=AB={sym.latex(C)}")))
#行列のx,yに数値を代入
C1 = C.subs({x:10, y: 20})
display((Math(f"C(10,20)={sym.latex(C1)}")))
#行列をxで偏微分
dCdx = sym.diff(C, x)
display((Math(r"\frac{\partial C}{\partial x}"f"={sym.latex(dCdx)}")))
#行列をyで偏微分
dCdy = sym.diff(C, y)
display((Math(r"\frac{\partial C}{\partial y}"f"={sym.latex(dCdy)}")))
#スカラー関数をベクトルで微分
dfdxy = sym.diff(f, xy)
display((Math(r"\frac{df}{dxy}"f"={sym.latex(dfdxy)}")))
#ベクトル関数をベクトルで微分
dpqdxy = sym.diff(pq, xy.T)
display((Math(r"\frac{dpq}{dxy}"f"={sym.latex(dpqdxy)}")))
#スカラー関数を行列で微分(エラーが出ます)
# dfdA = sym.diff(f, A)
# display((Math(r"\frac{df}{dA}"f"={sym.latex(dfdA)}")))
Visual Studio Code에서 1행째의 #%%에서 copipe가 되어 사경이 되어 보고 싶다.
1행째의 #%%는 VS Code가 Jupyter notebook로 바뀐다.
보통으로 실행하면 엄청 안됩니다.
아래 그림에 있는 Run Cell이라는 것을 붙여 주세요.
그러면 이런 것이 나오는 거예요!
행렬의 요소는 숫자 일 수 있지만 물론 위의 예와 같이 문자 일 수 있습니다.
연산도 문자 포함으로 해준다.
또한이 문자 (변수)에 수치를 대입 할 수 있고 수식을 넣는 다나카 씨와 같은
변태도 있다…
벡터로 미분도 가능하기 때문에 백 프로파게이션의 연쇄율을 가르칠 때
사용할 수 있을 것 같다.
그래서 점심 식사를합니다.
Reference
이 문제에 관하여(Numpy 퇴장? ! Sympy로 행렬을 편미분), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oldEng/items/8afcb5b2f5657661be3f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)