代码之家  ›  专栏  ›  技术社区  ›  SapereAude

在Python中,为什么numpy数组的预分配无法限制其打印精度?

  •  2
  • SapereAude  · 技术社区  · 9 月前

    下面是一个最小的例子:

    import numpy as np
    np.set_printoptions(linewidth=1000, precision=3)
    
    # First attempt fails to limit the printed precision of x
    x = np.array([None])
    x[0] = 1/3
    print(x)
    
    # Second attempt succeeds
    x = [None]
    x[0] = 1/3
    x = np.array(x)
    print(x)
    

    运行此脚本会产生

    [0.3333333333333333]
    [0.333]
    

    为什么上述“第一次尝试”未能限制打印精度 x 第二次尝试成功了吗?

    1 回复  |  直到 9 月前
        1
  •  3
  •   mkrieger1 djuarezg    9 月前

    运行时:

    x = np.array([None])
    x[0] = 1/3
    print(x)
    

    x 是一个 对象 数组(包含python浮点数),而不是像第二次尝试那样具有浮点数类型的数组:

    array([0.3333333333333333], dtype=object)
    

    这忽略了打印选项。

    您可以通过以下方式简单地复制它:

    print(np.array([1/3], dtype=object), np.array([1/3]))
    

    输出: [0.3333333333333333] [0.333]

    作为解决方法,将数组转换为float:

    print(x.astype(np.float64))
    # [0.333]