Python 如何转换';数据类型=对象';NumPy数组到';dtype=float';大堆

Python 如何转换';数据类型=对象';NumPy数组到';dtype=float';大堆,python,numpy,matrix,linear-algebra,sympy,Python,Numpy,Matrix,Linear Algebra,Sympy,这个问题是由使用Symphy查找缩减的行梯队矩阵引起的,我有下面的屏幕截图。通过使用SymPy,我可以得到一个对象的NumPy数组,这让我很困惑。首先,我没有看到rref矩阵中的数字被“”或“”包装,为什么它们是“对象”。第二,有没有办法将其转换为“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_r

这个问题是由使用Symphy查找缩减的行梯队矩阵引起的,我有下面的屏幕截图。通过使用SymPy,我可以得到一个对象的NumPy数组,这让我很困惑。首先,我没有看到rref矩阵中的数字被“”或“”包装,为什么它们是“对象”。第二,有没有办法将其转换为“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)

简短回答:
M\u rref.astype(float)
将解决您的问题

长答覆: 为什么会发生这种情况

为了找到答案,请尝试返回矩阵
M
,然后尝试以下操作:

打印(M[0]) >>>打印(类型(M[0])) 您将获得:

4
sympy.core.numbers.Integer
这就是为什么。尽管它说它是4,但实际上它是一个存储在symphy矩阵中的symphy对象。应该是这样的:SymPy是符号数学的代表。因此,当您将其转换为numpy数组时,numpy将把
sympy.core.numbers.Integer
识别为对象

希望这能回答您的问题。

这里有一个关于numpy矩阵到SymPy矩阵的错误转换的注释。使用它(而不是
float
,我不认为这是为了将对象的内容转换为float),我会:

>>> sy.Matrix(M.rows, M.cols, [sympify(x) for x in M_rref]).n()

这将为您提供一个SymPy矩阵,其中的条目被评估为浮动。

除非绝对必要,否则请不要将信息作为图像共享。见:,,谢谢!下次我会遵守规则的!这次呢?@Flyingpig补充了一些信息来帮助你理解。