把一个symphy矩阵转换成numpy数组/矩阵的最佳方法是什么

2024-04-18 01:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定我在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有更好的内置解决方案吗?

谢谢你!


Tags: 方法lambdanumpy符号矩阵valarraymatrix
3条回答

我是根据克拉斯坦诺夫和阿斯穆勒的建议来回答的。这个小片段使用sympy中的lambdify

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

这似乎是实现问题的最佳途径。

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

本机的tolist方法,将symphy矩阵变成嵌套索引

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

.astype(float64)将把数组的数字转换为默认的numpy float类型,该类型将处理任意numpy矩阵操作函数。

另外,值得一提的是,通过强制转换为numpy,您可以在保留sympy变量和表达式的同时,释放执行矩阵运算的能力。

编辑: 我附加说明的一点是,在转换到numpy.array时,您失去了在矩阵中的任意位置拥有变量的能力。所有的矩阵元素必须是数字之前,你铸造或一切将打破。

这看起来是最直接的:

np.array(g).astype(np.float64)

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

相关问题 更多 >

    热门问题