
正文
python矩阵求导函数 numpy矩阵求导
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
1.矩阵求导
本节是自动求导框架技术的第一节python矩阵求导函数,本系列其余文章包括
自动求导框架综述
2. 链式法则与计算图
3. 控制流与其实现思路
4. 自动求导框架的架构
5. 使用自动求导框架实现RNN
本节内容主要介绍矩阵求导的相关知识主要参考了知乎的 矩阵求导术 这系列文章。由于自动求导框架是建立在张量(tensor)运算上的,张量在这里理解为一种多维的矩阵,因此矩阵求导的概念是自动求导框架的基础。
矩阵求导是针对于参数是矩阵的函数,比如函数
其中X,Y,Z都是矩阵。矩阵求导可以看做是单一变量求导的推广,以上面的函数为例, Z 对 X 求导就是 Z 矩阵中的每个元素对 X 矩阵中的每个元素求导,然后做一下简单的合并。 假设矩阵 Z 是一个尺寸为 a×b 的矩阵,矩阵 X 是一个 c×d 的矩阵,矩阵 Z 对矩阵 X 的导数矩阵 G_zx 的求解分成了两步python矩阵求导函数: 1.求导 2.合并 。在求导的时候矩阵G_zx是一个尺寸为 (ab) × (cd) 的二维矩阵,其中第 i 行中的第 j 个元素表示 Z 矩阵中的 i 号元素对 X 矩阵的 j 号元素进行求导,这样就把矩阵求导转化为了单个变量的求导过程:
观察上图中的 G_zx 矩阵,可知对于每一列而言实际上是 Z 矩阵中每个元素对于 X 矩阵的某个元素的导数,则 Z 矩阵整体对于 X 矩阵中某个元素的导数即是把 G_zx 在求导步骤的结果按行相加,得到 尺寸为1 × (cd) 的矩阵,表示 Z 矩阵整体对于 X 矩阵中的 cd 个元素分别求导的结果,这就是合并步骤需要做的事情:
上面介绍了矩阵之间的求导方法,这个方法可以较为容易的推广到多维矩阵——张量上。
下面采用矩阵乘法作为例子,回顾一下上述过程。这时候 X 矩阵是一个 2×2 的矩阵,Y 是一个 2×2 的矩阵,Z是一个 2×2 的矩阵,f 函数表示 X 矩阵和 Y 矩阵乘法。通过上述过程python矩阵求导函数我们可以得到以下结果:
相关问答
Q1: 矩阵求导
矩阵的微分是函数导数的概念形式推广到矩阵的情形。矩阵微分根据对不同变量的求导,有不同形式。
定义一: 设m×n矩阵
A(t)=【amn(t)】
的每个元素aij(t)都是自变量t的可导函数,则称m×n矩阵【δamn(t)/δt】为A(t)关于变量t的导数,记为δA(t)/δt;
定义二:设A为m×n阵,f(A)为矩阵A的数量值函数。若f(A)关于A的任一元素aij的偏导δf/ δaij都存在,则称【δf/δamn】为f(A)关于A=(aij)的导数,记为δf(A)/δA;
定义三:设A为m×n维矩阵型变量,A=(aij),G(A)维A的矩阵值函数(p×q维)即G(A)=【g(A)pq】,其中g(A)ij都为A的数值量函数,且关于A可导,则称【δG/δaij】=△⊙G(△应是倒三角,为[δ/δaij],Hamilton算子矩阵;⊙应是乘号加圈,为Kronecker积);
可以参考矩阵论的相关书籍。
Q2: 用PYTHON求导怎么求
#coding:utf-8
#一阶导
def fun1(X, WINDOW = 5):
result = []
for k in range(WINDOW, len(X)-WINDOW):
mid = (X[k+WINDOW]-X[k-WINDOW])/(2*WINDOW)
result.append(mid)
return result
#二阶导
def fun2(X, WINDOW = 5):
result = []
for k in range(WINDOW, len(X)-WINDOW):
mid = (X[k+WINDOW]-2*X[k]+X[k-WINDOW])/(WINDOW*WINDOW)
result.append(mid)
return result
X = [1,2,3,4,5,6,7,8,9,10]
result1 = fun1(X, 3)
result2 = fun2(X, 2)
如上自己写,或者用numpy自带的多项式的n阶导函数。
得到多项式的n阶导函数:多项式.deriv(m = n)
from numpy import *
X = [1,2,3,4,5,6,7,8,9,10]
result = X.deriv(m = n) #n是导数阶数
Q3: 如何用python求导数
打开python运行环境。
导入微分的模块包python矩阵求导函数:from sympy import *。
定义符号变量:x = symbols('x')
定义一个函数:f = x**9
diff = diff(f,x)求导
最后输入diffpython矩阵求导函数,即可显示其变量值python矩阵求导函数了。
众多python培训视频,尽在python学习网,欢迎在线学习!
Q4: python 怎么实现矩阵运算
1.numpy的导入和使用
data1=mat(zeros((
)))
#创建一个3*3的零矩阵python矩阵求导函数,矩阵这里zeros函数的参数是一个tuple类型(3,3)
data2=mat(ones((
)))
#创建一个2*4的1矩阵python矩阵求导函数,默认是浮点型的数据python矩阵求导函数,如果需要时int类型python矩阵求导函数,可以使用dtype=int
data3=mat(random.rand(
))
#这里的random模块使用的是numpy中的random模块,random.rand(2,2)创建的是一个二维数组,需要将其转换成#matrix
data4=mat(random.randint(
10
,size=(
)))
#生成一个3*3的0-10之间的随机整数矩阵,如果需要指定下界则可以多加一个参数
data5=mat(random.randint(
,size=(
))
#产生一个2-8之间的随机整数矩阵
data6=mat(eye(
,dtype=
int
))
#产生一个2*2的对角矩阵
a1=[
]; a2=mat(diag(a1))
#生成一个对角线为1、2、3的对角矩阵
python矩阵求导函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于numpy矩阵求导、python矩阵求导函数的信息别忘了在本站进行查找喔。







