以科学记数法的形式显示数组

时间:2012-07-26 20:51:06

标签: python numpy

我想用科学记数法表示我的结果(例如,1.2e3)。我的数据是数组格式。是否有像tolist()这样的函数可以将数组转换为浮点数,因此我可以使用%E来格式化输出?

这是我的代码:

import numpy as np
a=np.zeros(shape=(5,5), dtype=float)
b=a.tolist()
print a, type(a), b, type(b)
print '''%s''' % b 
# what I want is 
print '''%E''' % function_to_float(a or b)

2 个答案:

答案 0 :(得分:12)

如果你的Numpy版本是1.7或更高版本,你应该可以使用formatter选项numpy.set_printoptions 1.6应该肯定有用 - 1.5.1也可以。

import numpy as np
a = np.zeros(shape=(5, 5), dtype=float)
np.set_printoptions(formatter={'float': lambda x: format(x, '6.3E')})
print a

或者,如果您没有formatter,则可以创建一个新数组,其值的格式为所需格式的字符串。这将创建一个与原始数组一样大的全新数组,因此它不是最有效的内存方式,但如果你不能升级numpy它可能会有效。 (我测试了它,它适用于numpy 1.3.0。)

使用此策略获得与上述类似的内容:

import numpy as np
a = np.zeros(shape=(5, 5), dtype=float)
formatting_function = np.vectorize(lambda f: format(f, '6.3E'))
print formatting_function(a)

'6.3E'是您希望每个值打印为的格式。您可以参考this documentation了解更多选项。

在这种情况下,6是打印数字的最小宽度,3是小数点后显示的位数。

答案 1 :(得分:3)

您可以用科学计数法格式化数组的每个元素,然后根据需要显示它们。列表不能转换为浮点数,它们可能会浮在浮点数内。

import numpy as np
a = np.zeroes(shape=(5, 5), dtype=float)
for e in a.flat:
    print "%E" % e

print ["%E" % e for e in a.flat]