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이라는 것을 붙여 주세요.



그러면 이런 것이 나오는 거예요!


행렬의 요소는 숫자 일 수 있지만 물론 위의 예와 같이 문자 일 수 있습니다.
연산도 문자 포함으로 해준다.
또한이 문자 (변수)에 수치를 대입 할 수 있고 수식을 넣는 다나카 씨와 같은
변태도 있다…
벡터로 미분도 가능하기 때문에 백 프로파게이션의 연쇄율을 가르칠 때
사용할 수 있을 것 같다.
그래서 점심 식사를합니다.

좋은 웹페이지 즐겨찾기