Python 如何转换';数据类型=对象';NumPy数组到';dtype=float';大堆
这个问题是由使用Symphy查找缩减的行梯队矩阵引起的,我有下面的屏幕截图。通过使用SymPy,我可以得到一个对象的NumPy数组,这让我很困惑。首先,我没有看到rref矩阵中的数字被“”或“”包装,为什么它们是“对象”。第二,有没有办法将其转换为“dtype=float”np.arrayPython 如何转换';数据类型=对象';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
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补充了一些信息来帮助你理解。