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

Foo*_*chu 15 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'
Run Code Online (Sandbox Code Playgroud)

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

亲切的问候,

fookatchu

Dav*_*nan 11

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

>>> x = 1.2345678
>>> '%.2f' % x
'1.23'
Run Code Online (Sandbox Code Playgroud)


til*_*ten 10

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

例:

print '{:.2f}'.format(0.1234)  # '0.12'
print '{:.2e}'.format(0.1234)  # '1.23e-01'
Run Code Online (Sandbox Code Playgroud)


Mik*_*e T 5

Numpy 1.14及更高版本具有format_float_positionalformat_float_scientific功能,可以将浮点标量格式化为位置或科学计数形式的十进制字符串,并可以控制舍入,修整和填充。与传统的Python字符串格式化程序相比,这些函数为格式化提供了更多控制。

import numpy as np

x = np.float64('1.2345678')
print(np.format_float_positional(x))  # 1.2345678
print(np.format_float_positional(x, precision=3))  # 1.235
print(np.format_float_positional(np.float16(x)))  # 1.234
print(np.format_float_positional(np.float16(x), unique=False, precision=8))  # 1.23437500

y = x / 1e8
print(np.format_float_scientific(y))  # 1.2345678e-08
print(np.format_float_scientific(y, precision=3, exp_digits=1))  # 1.235e-8
Run Code Online (Sandbox Code Playgroud)

等等


这些高级格式化程序基于Dragon4算法。请参阅Ryan Juckett的印刷浮点数,以了解有关该主题的更多信息。