【问题标题】:How do i convert sympy matrix output into numpy array我如何将 sympy 矩阵输出转换为 numpy 数组
【发布时间】:2020-05-30 15:06:15
【问题描述】:

下面附上我的代码

import sympy as sym

k = [3,10,0.65,0.3]
x = [999, 1, 0] 
SU, IN, IM= x[0], x[1], x[2]

def equation():   
    dsdt = '(IM/k0) - ((IN/(IN+SU))*k1*k2*SU)'
    dindt = '((IN/(IN+SU))*k1*k2*SU) - (IN/k3)'
    dimdt = '(IN/k3) - (IM/k0)'
    return [dsdt, dindt, dimdt]

def Jacobian(v_str, f_list):
    vars = sym.symbols(v_str)
    f = sym.sympify(f_list)
    J = sym.zeros(len(f),len(vars))
    for i, fi in enumerate(f):
        for j, s in enumerate(vars):
            J[i,j] = sym.diff(fi, s)
    return J

Jacobian('k0 k1 k2 k3', equation())

我需要将返回值放在 numpy.array 中以进行进一步处理...现在我只是对其进行硬编码。 使用jupyter notebook,python版本3.7.6

样本输出:

【问题讨论】:

  • 返回的矩阵J中有哪些矩阵元素?只有数字?
  • 返回矩阵是方程形式
  • @V.Ayrat AttributeError: MutableDenseMatrix 没有属性 sub。
  • .subs() 不是.sub()

标签: python numpy sympy


【解决方案1】:

如果你想要一个 numpy 数组,那么以下方法将起作用:展平矩阵并将其传递给数组:

from numpy import array
from sympy import flatten, Matrix
print(array(flatten(Matrix(equation()).jacobian(var('k0 k1 k2 k3')))))

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多