numpy.around不适合工作

时间:2018-02-08 13:26:19

标签: python arrays numpy rounding

我正在尝试使用numpy.around格式化浮点数向量,以便每个值都有两位小数。但是,当最后一位为0时,它会自动省略它。

例如,当我有以下代码时

import numpy as np
a = np.array([  56.8313253 ,  385.30120482,    6.65060241,  126.62650602,
         85.75903614,  192.72289157,  112.80722892,   10.55421687 ])
np.around(a,decimals=2)

我收到以下结果,其中第二个数字只有一位数。

array([  56.83,  385.3 ,    6.65,  126.63,   85.76,  192.72,  112.81,
         10.55])

有什么办法可以让我总是把0保持在最后?这是出版目的所需要的,手工添加0是太繁琐了,因为我有很多这样的案例。

3 个答案:

答案 0 :(得分:1)

不太确定您的出版物需要什么,但如果您只需要某种列表中的数字,则可以使用这样的字符串格式:

import numpy as np
[  56.8313253 ,  385.30120482,    6.65060241,  126.62650602,
         85.75903614,  192.72289157,  112.80722892,   10.55421687 ])
["{:.2f}".format(x) for x in a]

返回:

['56.83', '385.30', '6.65', '126.63', '85.76', '192.72', '112.81', '10.55']

答案 1 :(得分:1)

在打印阵列之前使用np.set_printoptions(formatter={'float': '{: 0.3f}'.format})

In [1]: import numpy as np

In [2]: a = np.random.random(20)

In [3]: print(a)
[ 0.78298863  0.09129314  0.04204522  0.04574351  0.76764957  0.58406234
  0.26670654  0.39624515  0.27261618  0.29430686  0.49316331  0.72693718
  0.16535966  0.53017297  0.66432047  0.24194043  0.91635168  0.29603418
  0.07480831  0.67555659]

In [4]: np.set_printoptions(formatter={'float': '{: 0.3f}'.format})

In [5]: print(a)
[ 0.783  0.091  0.042  0.046  0.768  0.584  0.267  0.396  0.273  0.294
  0.493  0.727  0.165  0.530  0.664  0.242  0.916  0.296  0.075  0.676]

答案 2 :(得分:0)

decimal模块提供了一个解决方案:

import numpy as np
from decimal import *

arr = np.array([  56.83,  385.3 ,    6.65,  126.63,   85.76,  192.72,  112.81, 10.55])
arr2 = [str(Decimal(i).quantize(Decimal('.01'))) for i in arr]

# ['56.83', '385.30', '6.65', '126.63', '85.76', '192.72', '112.81', '10.55']