2

我有以下对称矩阵sympy

m = sympy.Matrix([[x**2, x**3, x**4],
                  [x**3, x**5, x**6],
                  [x**4, x**6, x**7]])

我的目标是获得这个矩阵的上三角形作为一个扁平数组,比如[x**2, x**3, x**4, x**5, x**6, x**7],可以由 处理lambdify

我用 Innumpy来辅助实现这一点:

f = lambdify((x), sympy.Matrix(np.array(m)[np.triu_indices(m.shape[0])]))

所以这f(2.)给出了:

[[   4.    8.   16.   32.   64.  128.]]

问题是:

  • 有没有本地方法可以做到这一点sympy

奖金:

  • 有没有办法获得 a1D-array而不是 a matrix
4

1 回答 1

0

我认为 SymPy 中还没有直接执行此操作的功能(但欢迎使用补丁!)。你可能很容易写一个。

您可以尝试的一件事是使用cse

>>> print cse(a)
([(x0, x**3), (x1, x**4), (x2, x**6)], [Matrix([
[x**2,   x0,   x1],
[  x0, x**5,   x2],
[  x1,   x2, x**7]])])

这将防止您多次评估同一个表达式。如果您的实际表达式真的只是 的幂x,那么您可能可以编写更有效的代码,因为在计算 的所有幂时涉及大量重复工作x

于 2013-07-08T19:01:27.693 回答