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