将SymPy矩阵转换为numpy数组/矩阵的最佳方法是什么?

时间:2013-06-12 15:48:33

标签: python arrays matrix numpy sympy

我不确定我在sympy中使用的将MutableDenseMatrix转换为numpy.arraynumpy.matrix的方法是否是当前的良好做法。

我有一个符号矩阵,如:

g = sympy.Matrix( [[   x,  2*x,  3*x,  4*x,  5*x,  6*x,  7*x,  8*x,   9*x,  10*x]
                   [x**2, x**3, x**4, x**5, x**6, x**7, x**8, x**9, x**10, x**11]] )

我正在转换为numpy.array

g_func = lambda val: numpy.array( g.subs( {x:val} ).tolist(), dtype=float )

我得到一个给定值x的数组。

SymPy中有更好的内置解决方案吗?

谢谢!

4 个答案:

答案 0 :(得分:18)

这看起来最简单:

config/environment/production.rb

如果跳过astype方法,numpy将创建一个'object'类型的矩阵,这对于常见的数组操作不起作用。

答案 1 :(得分:11)

我在这里接受Krastanov和asmeurer的建议。这个小片段使用来自sympy的lambdify

from sympy import lambdify
g_func = lambdify( (x), g )

这似乎是实现问题要求的最佳方式。

答案 2 :(得分:5)

 numpy.array(SympyMatrix.tolist()).astype(numpy.float64)

本地tolist方法,使sympy矩阵成为嵌套索引的内容

numpy.array可以将嵌套索引的内容转换为数组

.astype(float64)会将数组的数字转换为默认的numpy float类型,这将适用于任意numpy矩阵操作函数。

作为一个额外的注释 - 值得一提的是,通过强制转换为numpy,你可以放弃执行矩阵运算的能力,同时保持同步变量和表达式。

编辑: 另外需要注意的是,在转换为numpy.array时,您无法在矩阵中的任何位置放置变量。你所有的矩阵元素必须在你演员之前已经是数字或者一切都会破裂。

答案 3 :(得分:1)

SymPy-0.7.6.1_mpmath_ matrix docs开始,tolist()方法存在:

  

最后,可以将矩阵转换为嵌套列表。这非常有用,因为大多数涉及矩阵或数组的Python库(即NumPy或SymPy)都支持这种格式:

B.tolist()