同意,获得对称矩阵的上三角形作为扁平阵列

时间:2013-07-08 11:25:39

标签: python arrays numpy matrix sympy

我在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处理。

我使用In numpy来辅助实现这一点:

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

因此f(2.)给出了:

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

问题是:

  • sympy
  • 中是否有以原生方式执行此操作

加成:

  • 有没有办法获得1D-array而不是matrix

1 个答案:

答案 0 :(得分: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的所有权力所涉及的大量重复工作这一事实来编写更有效的代码。