【问题标题】:How to convert the 'dtype = object' NumPy array into 'dtype = float' array?如何将 'dtype = object' NumPy 数组转换为 'dtype = float' 数组?
【发布时间】:2020-03-20 15:23:43
【问题描述】:

这个问题是由使用 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)

【问题讨论】:

标签: python numpy matrix linear-algebra sympy


【解决方案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 识别为对象。

希望能回答你的问题。

【讨论】:

  • @Flyingpig 添加了更多信息以帮助您理解。
【解决方案2】:

PR 中有一条关于将 numpy 矩阵错误地转换为 SymPy 矩阵的注释。使用它(而不是float,我认为它旨在将对象的内容转换为浮点数)我会这样做:

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

这应该会给你一个 SymPy 矩阵,其中的条目被评估为浮点数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2021-07-19
    • 2013-10-27
    • 2021-10-25
    相关资源
    最近更新 更多