You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Python中Jacobian矩阵代码实现的理解是否正确?

你的理解完全正确!

咱们来一步步拆解为什么这个Jacobian矩阵就是矩阵a

首先回忆下Jacobian矩阵的核心定义:对于一个把n维输入向量映射到m维输出向量的函数f(b) = c,它的Jacobian矩阵是一个m×n的矩阵,其中每个元素J[i][j]等于输出向量c的第i个分量对输入向量b的第j个分量的偏导数,也就是∂c_i/∂b_j

回到你的代码场景:

  • 输入b是3×1的向量(n=3)
  • 输出c = a.dot(b),其中a是3×3的矩阵,所以c也是3×1的向量(m=3)
  • c的每个分量展开来看:
    • c₁ = 1*b₁ + 2*b₂ + 3*b₃
    • c₂ = 4*b₁ + 5*b₂ + 6*b₃
    • c₃ = 7*b₁ + 8*b₂ + 9*b₃

现在计算偏导数:

  • c₁来说,它对b₁的偏导是1,对b₂是2,对b₃是3——这正好是a的第一行
  • c₂来说,偏导数分别是4、5、6——对应a的第二行
  • c₃来说,偏导数是7、8、9——对应a的第三行

所以整个Jacobian矩阵的元素完全和a一致,你的判断没问题。

如果想用Python自动微分工具验证的话,比如用autograd库,代码可以这么写:

import autograd.numpy as np
from autograd import jacobian

a = np.array([[1,2,3], [4,5,6], [7,8,9]])
def f(b):
    return a.dot(b)

# 随便选一个b的值,这里用你代码里的[1,2,3]
b = np.array([1,2,3])
jac_matrix = jacobian(f)(b)
print(jac_matrix)

运行后输出的结果就是和a完全一样的矩阵,也能佐证你的结论。

内容的提问来源于stack exchange,提问作者filtertips

火山引擎 最新活动