gpt4 book ai didi

python - 同情 : creating a numpy function from diagonal matrix that takes a numpy array

转载 作者:太空狗 更新时间:2023-10-29 18:02:06 31 4
gpt4 key购买 nike

基于我发现的示例 here ,我正在尝试从使用 sumpy.diag

创建的对角矩阵创建函数
myM = Matrix([
[x1, 4, 4],
[4, x2, 4],
[4, 4, x3]])

例如,这是使用此例程创建的:

import sympy as sp
import numpy as np

x1 = sp.Symbol('x1')
x2 = sp.Symbol('x2')
x3 = sp.Symbol('x3')
X = sp.Matrix([x1, x2, x3])

myM = 4 * sp.ones(3, 3)
sp.diag(*X) + myM - sp.diag(*np.diag(myM))

现在我想创建一个函数,使用 ufuncifylambdify,它采用 numpy.array 或长度为 3(如 np.array([0.1,0.2,0.3]))作为输入,根据myM

将输出作为矩阵
myM = Matrix([
[0.1, 4, 4],
[4, 0.2, 4],
[4, 4, 0.3]])

最终我需要使用这种方法象征性地创建一个雅可比矩阵: Jacobian由于函数形式在计算过程中可能会发生变化,因此以符号方式计算雅可比行列式将非常有用。

最佳答案

从数字向量创建数字 3 x 3 矩阵并不是真正的 SymPy 事情,因为不涉及任何符号。考虑以下情况,其中参数 d 是一个包含对角线元素的数组。

def mat(d):
return np.diag(d-4) + 4

上述函数返回一个二维 NumPy 数组。要改为返回 SymPy 矩阵,请使用

def mat(d):
return sp.Matrix(np.diag(d-4) + 4)

当 d 具有极小的值时,先减后加可能会导致精度损失:例如,(1e-20 - 4) + 4 的计算结果为零。一个更安全的选择是

def mat(d):
diagmat = np.diag(d)
return diagmat + np.fromfunction(lambda i, j: (i != j)*4, diagmat.shape)

关于python - 同情 : creating a numpy function from diagonal matrix that takes a numpy array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41791430/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com