此问题是由使用SymPy查找缩小的行梯形矩阵引起的,下面有屏幕截图。通过使用SymPy,我可以获得对象的NumPy数组,这对我来说很令人困惑。首先,我看不到rref矩阵中的数字被''或''包裹,它们为什么成为'object'。其次,有什么方法可以将其转换为“ dtype = float” np.array?
M = sy.Matrix([[4, 0, 11, 3], [7, 23, -3, 7], [12, 11, 3, -4]])
M_rref = M.rref()
M_rref = np.array(M_rref[0])
M_rref.astype(float)
答案 0 :(得分:1)
M_rref.astype(float)
将解决您的问题。
为什么会这样?
为了找出答案,请尝试返回矩阵M
并尝试以下操作:
>>> print(M[0])
>>> print(type(M[0]))
您将获得:
4
sympy.core.numbers.Integer
这就是原因。即使它说是4,它实际上是一个存储在SymPy矩阵中的SymPy 对象。这就是应该的方式:SymPy用于符号数学。因此,当您将其转换为numpy数组时,NumPy会将sympy.core.numbers.Integer
识别为对象。
希望能回答您的问题。
答案 1 :(得分:0)
在此PR中,有一个有关将numpy矩阵错误转换为SymPy矩阵的注释。使用该方法(而不是float
,我认为该方法旨在将对象的内容转换为浮点数)
>>> sy.Matrix(M.rows, M.cols, [sympify(x) for x in M_rref]).n()
这应该为您提供一个SymPy矩阵,其条目被评估为浮点数。