【问题标题】:Anomalous decimal places in python after list-to-numpy-to-list在list-to-numpy-to-list之后python中的异常小数位
【发布时间】:2012-11-29 15:37:29
【问题描述】:

在我的 ubuntu linux 机器上用全新的 Python 2.7.3 解释器执行以下代码,会得到代码后显示的输出。

import numpy as np
p = [1/3., 1/2., 23/25., 1]
q = np.array(p)
r = list(q)
print p; print q; print r

输出:

[0.3333333333333333, 0.5, 0.92, 1]
[ 0.33333333  0.5         0.92        1.        ]
[0.33333333333333331, 0.5, 0.92000000000000004, 1.0]

我试图弄清楚为什么 p 和 r 的打印结果不同,但到目前为止还没有一个合理的理论。关于它们为什么不同的任何想法?

【问题讨论】:

    标签: python numpy floating-point python-2.7


    【解决方案1】:

    它们的打印方式不同,因为pfloatint 的列表,而rnumpy.float64 的列表:

    In [23]: map(type, p)
    Out[23]: [float, float, float, int]
    
    In [24]: map(type, r)
    Out[24]: [numpy.float64, numpy.float64, numpy.float64, numpy.float64]
    

    发生这种情况是因为 NumPy 数组属于统一类型,因此当您创建 q 时,所有内容都会扩大到 float64

    两个列表中的值比较相等,所以纯粹是格式上的不同:

    In [22]: p == r
    Out[22]: True
    

    【讨论】:

      【解决方案2】:

      我认为这只是 __repr__np.float64 与 python float 实现的区别。

      当您从 numpy 数组创建列表时,您将元素(类型为 np.float64)放入列表中。因此,您实际上已经将原始数据的类型从float 转换为np.float64

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-20
        • 2022-12-01
        • 1970-01-01
        相关资源
        最近更新 更多