【问题标题】:removing scientific notation ONLY for the zero values when printing a numpy array?打印numpy数组时仅删除零值的科学记数法?
【发布时间】:2021-10-16 12:41:01
【问题描述】:

现在我的数组打印如下:

  [[ 1.5531e-01 -4.6594e-02  0.0000e+00  0.0000e+00  0.0000e+00  0.0000e+00]
 [-4.6594e-02  1.5531e-01  0.0000e+00  0.0000e+00  0.0000e+00  0.0000e+00]
 [ 0.0000e+00  0.0000e+00  4.0381e-01  0.0000e+00  0.0000e+00  0.0000e+00]
 [-0.0000e+00 -0.0000e+00 -0.0000e+00  1.9826e+03 -5.9479e+02 -0.0000e+00]
 [ 0.0000e+00  0.0000e+00  0.0000e+00 -5.9479e+02  1.9826e+03  0.0000e+00]
 [ 0.0000e+00  0.0000e+00  0.0000e+00  0.0000e+00  0.0000e+00  5.1549e+03]]

我想要的是:

[[ 1.4531e-01 -4.6594e-02  0           0           0           0         ]
 [-4.6594e-02  1.4531e-01  0           0           0           0         ]
 [ 0           0           4.0381e-01  0           0           0         ]
 [ 0           0           0           1.9826e+03 -5.9479e+02  0         ]
 [ 0           0           0          -5.9479e+02  1.9826e+03  0         ]
 [ 0           0           0           0           0           5.1549e+03]]

主要区别:

  • 顶行对齐
  • 零值显示为“0”,没有负号。

我打印了很多数组,所以我希望它是您可以设置的东西,而不是必须通过函数传递每个数组才能对其进行格式化。 np.set_printoptions 中是否有具有此功能的东西?

【问题讨论】:

    标签: python arrays numpy printing formatting


    【解决方案1】:

    当然,您可以根据docsnp.set_printoptions 中指定formatter。 下面的代码行将右填充设置为等于 0 的数字,否则以科学计数法打印它们,并保留符号。

    np.set_printoptions(formatter={'all': lambda x: '{:<11d}'.format(int(x)) if x == 0 else "{:+.4e}".format(x)})
    

    这是你得到的输出:

    [[+1.5531e-01 -4.6594e-02 0           0           0           0          ]
     [-4.6594e-02 +1.5531e-01 0           0           0           0          ]
     [0           0           +4.0381e-01 0           0           0          ]
     [0           0           0           +1.9826e+03 -5.9479e+02 0          ]
     [0           0           0           -5.9479e+02 +1.9826e+03 0          ]
     [0           0           0           0           0           +5.1549e+03]]
    

    【讨论】:

    • 非常感谢!我使用了格式化程序,但最终把它变成了一个字符串来对齐它。 np.set_printoptions( formatter={'all': lambda x: '{:&lt;9s}'.format(" 0. ") if x == 0 else "{: .2e}".format(x)})
    • 我很高兴它有帮助。请从帮助站点查看此部分:someone answers
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2014-03-20
    • 2012-12-14
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多