如何在str(numpy.float64)上设置精度?

时间:2011-01-30 19:09:02

标签: python numpy scipy

我需要将一些numpy浮点数写入csv文件,该文件具有其他字符串内容。因此我不使用savetxt等与numpy.set_printoptions()我只能定义打印行为,但不能定义str()行为。我知道我错过了一些东西并且它不能那么难,但我没有在互联网上找到合理的答案。也许有人可以指出我正确的方向。下面是一些示例代码:

In [1]: import numpy as np
In [2]: foo = np.array([1.22334])

In [3]: foo
Out[3]: array([ 1.22334])

In [4]: foo[0]
Out[4]: 1.2233400000000001

In [5]: str(foo[0])
Out[5]: '1.22334'

In [6]: np.set_printoptions(precision=3)

In [7]: foo
Out[7]: array([ 1.223])

In [8]: foo[0]
Out[8]: 1.2233400000000001

In [9]: str(foo[0])
Out[9]: '1.22334'

如何将np.float转换为格式正确的字符串,我可以将其提供给file.write()?

亲切的问候,

fookatchu

5 个答案:

答案 0 :(得分:10)

您可以使用标准字符串格式:

>>> x = 1.2345678
>>> '%.2f' % x
'1.23'

答案 1 :(得分:9)

您可以使用普通的字符串格式,请参阅: http://docs.python.org/library/string.html#formatspec

示例:

print '{:.2f}'.format(0.1234)  # '0.12'
print '{:.2e}'.format(0.1234)  # '1.23e-01'

答案 2 :(得分:4)

Numpy 1.14及更高版本具有format_float_positionalformat_float_scientific函数,可将浮点标量格式化为位置或科学记数法中的十进制字符串,并控制舍入,修剪和填充。与传统的Python字符串格式化程序相比,这些函数可以更好地控制格式化。

stateWithCities = {}
for x in cityDataList:
    stateWithCities.setdefault(x.state, []).append(x.name)

这些高级格式化程序基于Dragon4算法;请参阅Ryan Juckett的Printing Floating-Point Numbers以了解有关此主题的更多信息。

答案 3 :(得分:3)

而不是str(foo[0]),请使用"%.3f" % foo[0]

答案 4 :(得分:0)

你也可以这样做:

precision = 2
str(np.round(foo[0], precision))

当我需要做一个str(np.log(0.0))时,它对我来说有一些优势('%%。2f'%x),它被numpy整齐地处理为“-inf”所以你不要不得不在这里打扰。