使用带有dtype = float32的科学记数法的string.format出错

时间:2013-09-17 13:15:00

标签: python numpy

为什么这样做

print "{:e}".format(array([1e-10],dtype="float64")[0])
1.000000e-10

但不是吗?

print "{:e}".format(array([1e-10],dtype="float32")[0])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-29-9a0800b4df65> in <module>()
----> 1 print "{:e}".format(array([1e-10],dtype="float32")[0])

ValueError: Unknown format code 'e' for object of type 'str

更新 我尝试使用numpy版本1.6.1和Python 2.7.3。

me@serv8:~$ python -V
Python 2.7.3
me@serv8:~$ python -c "import numpy; print numpy.__version__"
1.6.1
me@serv8:~$ python -c "from numpy import array; print \"{:e}\".format(array([1e-10],dtype=\"float32\")[0])"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ValueError: Unknown format code 'e' for object of type 'str'

1 个答案:

答案 0 :(得分:4)

Numpy Bug#1675

这是一个在Numpy 1.6.2 (Change log here)中修复的错误。

分析

嗯......看起来我们可以把这些类型搞定:

>>> from numpy import array
>>> a64 = array([1e-10],dtype="float64")[0]
>>> a32 = array([1e-10],dtype="float32")[0]
>>> type(a32)
<type 'numpy.float32'>
>>> type(a64)
<type 'numpy.float64'>

所以,我们现在尝试打印:

>>> print a32
1e-10
>>> print a64
1e-10

好的,这似乎有效。让我们尝试用指数表示法打印:

>>> print('{0:e}'.format(a64))
1.000000e-10
>>> print('{0:e}'.format(a32))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: Unknown format code 'e' for object of type 'str'

做了一些谷歌搜索,我发现了一个类似的bug#1675的引用,据说在Numpy版本1.6.2中修复了。 (Change log here)

基于此,我随后安装了1.6.2并尝试了您在上面尝试的内容。有用。

>>> from numpy import array
>>> print "{:e}".format(array([1e-10],dtype="float64")[0])
1.000000e-10
>>> print "{:e}".format(array([1e-10],dtype="float32")[0])
1.000000e-10