Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将sympy矩阵写入python文件_Python_Sympy - Fatal编程技术网

将sympy矩阵写入python文件

将sympy矩阵写入python文件,python,sympy,Python,Sympy,我有一个脚本,可以自动生成方程式并将它们添加到列表中 e、 g: eq = [a*b, a + b*c -d, c**2 + a, d*a - 2] 用a,b,c,d表示所有符号 然后将列表转换为辛矩阵并计算雅可比矩阵 eq = sympy.Matrix(eq) jacobi = eq.jacobian([a, b, c, d]) 我想将这个jacobian保存在一个python文件中,以便在另一个python脚本中使用它 目前,我使用字符串列表创建一个定义,并将其写入python文件 va

我有一个脚本,可以自动生成方程式并将它们添加到列表中

e、 g:

eq = [a*b, a + b*c -d, c**2 + a, d*a - 2]
用a,b,c,d表示所有符号

然后将列表转换为辛矩阵并计算雅可比矩阵

eq = sympy.Matrix(eq)
jacobi = eq.jacobian([a, b, c, d])
我想将这个jacobian保存在一个python文件中,以便在另一个python脚本中使用它

目前,我使用字符串列表创建一个定义,并将其写入python文件

variable_list = [a, b, c, d]

jacobian_lines = ["def jacobian(variables):",
                           '    """ Returns the evaluated jacobian matrix',
                           '    :param variables: a list of numeric values to evaluate the jacobian',
                           '    """', '', '    {} = variables'.format(str(variable_list)), '',
                           '    j = {}'.format(jacobi), '', "    return j"]

file_path = 'jacobian.py'
file = open(file_path, 'w')

for line in jacobian_lines:
    file.write('{}\n'.format(line))
有没有更正确/更好的方法可以做到这一点?

我可以让你的代码简单一点 无需“for循环”即可完成作业:

variable_list = [a, b, c, d]

jacobian_lines = ["def jacobian(variables):",
                           '    """ Returns the evaluated jacobian matrix',
                           '    :param variables: a list of numeric values to evaluate the jacobian',
                           '    """', '', '    {} = variables'.format(str(variable_list)), '',
                           '    j = {}'.format(jacobi), '', "    return j"]

file_path = 'jacobian.py'
file = open(file_path, 'w').write('\n'.join(jacobian_lines))

不确定您以前是否遇到过这种情况,但您可以使用标准库中的将任意Python对象写入文件。这将允许您执行以下操作来保存雅可比矩阵:

import pickle
import sympy

a = sympy.symbols('a')
b = sympy.symbols('b')
c = sympy.symbols('c')
d = sympy.symbols('d')

eq = [a*b, a + b*c -d, c**2 + a, d*a - 2]
eq = sympy.Matrix(eq)
jacobi = eq.jacobian([a, b, c, d])

with open('~/Desktop/jacobian.pickle', 'wb') as outf:
    outf.write(pickle.dumps(jacobi))
然后,当您想将其加载到其他脚本中时,可以将该雅可比矩阵加载回内存,如下所示:

import pickle
import sympy

with open('~/Desktop/jacobian.pickle', 'rb') as inf:    
   jacobi = pickle.loads(inf.read())
print(jacobi)
产出:

Matrix([
[b, a,   0,  0],
[1, c,   b, -1],
[1, 0, 2*c,  0],
[d, 0,   0,  a]])

是的,我知道,但我正在努力避免写二进制文件。你可能想把它添加到问题中。这是现在最好的方法。SymPy具有代码生成功能,目前针对的是C和Fortran等其他语言,但它们主要获得了在将来编写Python代码的能力,这可能会使这类代码更容易编写。