如果我有一个像这样的numpy数组:
[2.15295647e+01, 8.12531501e+00, 3.97113829e+00, 1.00777250e+01]
我如何移动小数点并设置数字格式,所以最终得到一个像这样的numpy数组:
[21.53, 8.13, 3.97, 10.08]
np.around(a, decimals=2)
只给了我[2.15300000e+01, 8.13000000e+00, 3.97000000e+00, 1.00800000e+01]
我不想要的东西,我还没有找到另一种方法。
为了使numpy以任意格式显示浮点数组,可以定义一个自定义函数,该函数将浮点值作为其输入并返回格式化的字符串:
In [1]: float_formatter = "{:.2f}".format
在f
这里固定点格式(不是“科学”),以及.2
手段小数点后两位(你可以阅读更多关于字符串格式化这里)。
让我们用一个浮点值对其进行测试:
In [2]: float_formatter(1.234567E3)
Out[2]: '1234.57'
要使numpy以这种方式打印所有浮点数组,可以将formatter=
参数传递给np.set_printoptions
:
In [3]: np.set_printoptions(formatter={'float_kind':float_formatter})
现在numpy将以这种方式打印所有浮点数组:
In [4]: np.random.randn(5) * 10
Out[4]: array([5.25, 3.91, 0.04, -1.53, 6.68]
请注意,这仅影响numpy数组,而不影响标量:
In [5]: np.pi
Out[5]: 3.141592653589793
它也不会影响非浮点数,复杂的浮点数等-您将需要为其他标量类型定义单独的格式化程序。
您还应该知道,这只会影响numpy显示浮点值的方式-计算中将使用的实际值将保留其原始精度。
例如:
In [6]: a = np.array([1E-9])
In [7]: a
Out[7]: array([0.00])
In [8]: a == 0
Out[8]: array([False], dtype=bool)
numpy将其打印a
为等于0
,但不是-仍等于1E-9
。
如果您实际上想以某种方式舍入数组中的值,从而影响它们在计算中的使用方式np.round
,则应使用,正如其他人已经指出的那样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句