首页 > 解决方案 > 使用 sympy 获取返回标量的函数的 jacobian wrt 符号矩阵

问题描述

我正在尝试对矩阵取标量函数的雅可比

w = sym.MatrixSymbol('w',2,1)
g = sym.Matrix([sym.log(1 + sym.exp(sym.MatMul(w.T,w)))])
grad_g = g.jacobian(w)

[0,0]这将返回一个不正确的雅可比向量。

我在这里尝试了一个非符号实现:

w1, w2 = sym.symbols('w_1, w_2')
w = sym.Matrix([w1, w2])
g = sym.Matrix([sym.log(sym.Matrix([1]) + sym.exp(w.T * w))])
grad_g = g.jacobian(w)

我得到一个错误,上面写着:NotImplementedError:0 更多信息。

会喜欢任何和所有的帮助!

标签: pythonsympycalculus

解决方案


想通了非符号案例:

w1, w2 = sym.symbols('w_1 w_2')
w = sym.Matrix([w1, w2])
g = sym.log(1 + sym.exp(w.T * w)[0])
grad_g = sym.Matrix([g]).jacobian(w)

必须通过 sym.exp 索引到矩阵返回,而不是使 1 成为矩阵。

我很想知道是否有办法用 sym.MatrixSymbol 做到这一点,所以让我知道


推荐阅读