Matrix sympy中的符号矩阵,打印跟踪并生成C代码

Matrix sympy中的符号矩阵,打印跟踪并生成C代码,matrix,sympy,Matrix,Sympy,我是新来的sympy an,希望打印符号矩阵的轨迹,并使用函数ccode 目前,我有以下几点: import sympy as sp # Creates a symbolic matrix (3x3) with symbol A A = sp.MatrixSymbol('A', 3, 3) # Trace of a matrix traceM=sp.Trace(A) # Generate C code print(sp.ccode(traceM)) 如果我打印(sp.pprint)矩阵A

我是新来的sympy an,希望打印符号矩阵的轨迹,并使用函数
ccode

目前,我有以下几点:

import sympy as sp

# Creates a symbolic matrix (3x3) with symbol A
A = sp.MatrixSymbol('A', 3, 3)

# Trace of a matrix
traceM=sp.Trace(A)

# Generate C code
print(sp.ccode(traceM))
如果我打印(sp.pprint)矩阵A,我将得到:

In [49]:sp.pprint(sp.Matrix(A))
如果我打印A的跟踪,将出现以下错误

In [50]:sp.pprint(sp.Matrix(traceM))

TypeError: 
Data type not understood; expecting list of lists or lists of values.
我正急着去拿

此外,如果我尝试从跟踪生成C代码,我将得到以下消息

In [51]: print(sp.ccode(traceM))
// Not supported in C:
// Trace
Trace(A)
我跳起来是为了:

A[0, 0]+A[1, 1]+A[2, 2]
谁能帮我一下吗

注意:如果我使用numpy函数(
traceM=numpy.trace(a)
),它将给出预期的结果。。。但我应该能用辛皮得到同样的结果


致以最良好的祝愿,

因此,我认为这里的目标是展开跟踪表达式,并用显式和替换它。我发现执行展开过程的唯一方法是通过使用(我被暗示了这一点,因为跟踪类有一个名为的方法)

用于生成C源代码的模块是(另请参见Aaron Meurer的nice教程及其附件)

这在SymPy 1.7上进行了测试

将sympy作为sp导入
从sympy.utilities.codegen导入codegen
N=3
A=sp.MatrixSymbol('A',N,N)
traceM=sp.Trace(A).重写(sp.Sum)
[(c_名称,c_代码),(h_名称,c_头)]=codegen((“f”,traceM),“C89”,“test”,头=False,空=False)
打印(c_代码)
结果是:

#包括“test.h”
#包括
双f(双*A){
双f_结果;
f_结果=A[0]+A[4]+A[8];
返回f_结果;
}
需要注意的一点是,2D数组是一个