Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何设置str(numpy.float64)的精度?_Python_Numpy_Scipy - Fatal编程技术网

Python 如何设置str(numpy.float64)的精度?

Python 如何设置str(numpy.float64)的精度?,python,numpy,scipy,Python,Numpy,Scipy,我需要在一个csv文件中写入几个numpy浮动,该文件包含额外的字符串内容。因此,我不会将savetxt等与numpy.set_printoptions()一起使用。我只能定义打印行为,但不能定义str()行为。我知道我错过了一些东西,这不会那么难,但我在互联网上找不到一个合理的答案。也许有人能给我指出正确的方向。下面是一些示例代码: In [1]: import numpy as np In [2]: foo = np.array([1.22334]) In [3]: foo Out[3]:

我需要在一个csv文件中写入几个numpy浮动,该文件包含额外的字符串内容。因此,我不会将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

您可以使用普通字符串格式,请参阅:

例如:

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

不要使用
str(foo[0])
,而是使用
“%.3f”%foo[0]

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

>>> x = 1.2345678
>>> '%.2f' % x
'1.23'
您还可以执行以下操作:

precision = 2
str(np.round(foo[0], precision))
当我需要使用字符串str(np.log(0.0))时,它对我来说比('%.2f'%x')有一些优势,而str(np.log(0.0))被numpy巧妙地处理为“-inf”,因此您不必在这里费事。

numpy 1.14和更高版本具有和函数,可以将浮点标量格式化为位置或科学表示法中的十进制字符串,并控制舍入,修剪和填充。与传统的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
等等



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

您发布的代码无效。但是这个链接非常有用!正确的语法应该是:“{0:f}”。格式(a[1])。我明白了,谢谢。我以为会这么容易。。。其他答案也适用。谢谢大家!