作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
基于我发现的示例 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))
现在我想创建一个函数,使用 ufuncify
的 lambdify
,它采用 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]])
最终我需要使用这种方法象征性地创建一个雅可比矩阵: 由于函数形式在计算过程中可能会发生变化,因此以符号方式计算雅可比行列式将非常有用。
最佳答案
从数字向量创建数字 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/
我是一名优秀的程序员,十分优秀!