如何将 'dtype = object' NumPy 数组转换为 'dtype = float' 数组?
How to convert the 'dtype = object' NumPy array into 'dtype = float' array?
这个问题是使用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)
简答:
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
识别为对象。
希望这能回答您的问题。
在此 PR 中,有一条关于 numpy 矩阵到 SymPy 矩阵的错误转换的注释。使用它(而不是 float
,我认为它不会将对象的内容转换为浮点数)我会这样做:
>>> sy.Matrix(M.rows, M.cols, [sympify(x) for x in M_rref]).n()
这应该会为您提供一个 SymPy 矩阵,其中的条目评估为浮点数。
这个问题是使用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)
简答:
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
识别为对象。
希望这能回答您的问题。
在此 PR 中,有一条关于 numpy 矩阵到 SymPy 矩阵的错误转换的注释。使用它(而不是 float
,我认为它不会将对象的内容转换为浮点数)我会这样做:
>>> sy.Matrix(M.rows, M.cols, [sympify(x) for x in M_rref]).n()
这应该会为您提供一个 SymPy 矩阵,其中的条目评估为浮点数。