我不确定我在sympy
中使用的将MutableDenseMatrix
转换为numpy.array
或numpy.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中是否有更好的内置解决方案来做到这一点?
谢谢你,谢谢!
5条答案
按热度按时间s1ag04yj1#
这看起来是最简单的:
如果你跳过astype方法,numpy将创建一个类型为“object”的矩阵,这将不适用于常见的数组操作。
ryevplcw2#
这个答案是基于Krastanov和asmeurer的建议。这个小片段使用了sympy.lambdify:
其中
g
是包含所有分组在s
中的符号的表达式。如果使用
modules='numpy'
,函数g_func
的输出将是一个np.ndarray
对象:如果
modules='sympy'
,则输出为sympy.Matrix
对象。w9apscun3#
原生的
tolist
方法将sympy矩阵转换为嵌套索引numpy.array
可以将嵌套索引的内容转换为数组.astype(float64)
将数组的数字转换为默认的numpy float类型,这将与任意numpy矩阵操作函数一起工作。作为一个额外的注意-值得一提的是,通过铸造numpy你松散的能力,做矩阵运算,同时保持sympy变量和表达式沿着的旅程。
编辑:我的附加说明的重点是,在转换为numpy.array时,您失去了在矩阵中任何地方拥有变量的能力。所有的矩阵元素必须是数字之前,你投或一切都将打破。
5cnsuln74#
从SymPy-0.7.6.1_mpmath_ matrix文档中,
tolist()
方法存在:最后,可以将矩阵转换为嵌套列表。这非常有用,因为大多数涉及矩阵或数组(即NumPy或SymPy)的Python库都支持这种格式:
6gpjuf905#
Sympy现在提供了
sympy.matrix2numpy
函数:要对
x
的特定值执行替换,请执行以下操作:这种方法对于将数值Sympy矩阵转换为numpy数组特别有用: