是否有一种很好的方法来跟踪scipy中的大量符号?

时间:2017-07-22 22:54:36

标签: python sympy

我需要对非常大的方程组进行符号处理,最终得到200多个我需要进行计算的变量。问题是,在求解小方程组时,通常会将变量命名为xy,可能为z。即使从ab开始,......您也只能通过这种方式获得26个唯一变量。

有解决此问题的好方法吗?比方说,我想在每个点填充一个14x14矩阵,其中有一个不同的变量。我该怎么做呢?

3 个答案:

答案 0 :(得分:2)

您可以通过MatrixSymbol

使用符号矩阵
>>> A = MatrixSymbol('A', 14, 14)

可以按照您的预期访问

>>> A[2, 3]
A[2, 3]

答案 1 :(得分:0)

我认为最直接的方法是使用sympy.symarray,如下所示:

x = sympy.symarray("x",(5,5,5))

这会创建一个相应大小的(numpy)数组 - 此处大小为5x5x5 - 其中包含sympy变量,更具体地说,这些变量以您选择的任何内容为前缀 - 此处为"x" - 并且拥有与您提供的维度一样多的索引,这里3.当然,您可以根据需要制作尽可能多的这些数组 - 也许为不同的变量组使用不同的前缀以提高可读性等。

然后,您可以使用以下代码在代码中使用这些内容: X [I,J,K]:

In [6]: x[0,1,4] Out[6]: x_0_1_4

(请注意,你可以通过x_i_j_k访问元素 - 当我开始使用sympy时,我发现这有点违反直觉,但是一旦你掌握了python与sympy变量的关系,这很有道理。)

您当然也可以在阵列上使用切片,例如X [:,0,0]。 如果你需要一个变量的python列表,你可以使用例如x.flatten().tolist()

我认为这比使用sympy.MatrixSymbol更可取,因为(a)你可以决定你想要的索引数量,(b)元素是“正常”sympy.Symbol s,这意味着你如果你宣称它们是常规符号,你可以确定你可以用它们做任何事情。 (我不确定在观察1.1中是否仍然存在这种情况,但在同情1.0中,过去并非所有功能都是针对MatrixElement实现的。)

答案 2 :(得分:-2)

我建议使用包numpy,以便您可以使用NumPy数组。

# import statement
import numpy as np

# instantiate a NumPy array (matrix) with 14 rows and 14 columns
variableMatrix = np.zeros((14,14))

注意```np.zeros((14,14))``将用0填充矩阵,你可以稍后用你想要的变量值替换每个元素。请注意,函数调用中的额外括号是必要的!

您可以使用语法i,j访问矩阵的variableMatrix[i-1,j-1]元素。我从索引中减去了一个,因为当然Python索引从0开始。