如何强制ndarray以正常方式而非科学计数法显示?

4 投票
2 回答
4255 浏览
提问于 2025-04-16 07:13

我想在屏幕上打印一个ndarray(多维数组)。但是Python总是用科学计数法显示,这让我不太喜欢。对于一个标量(单个数字),我们可以使用

>>> print '%2.4f' %(7.47212470e-01)
0.7472

但是对于像这样的numpy.ndarray,我该怎么做呢:

[[  7.47212470e-01   3.71730070e-01   1.16736538e-01   1.22172891e-02]
 [  2.79279640e+00   1.31147152e+00   7.43946656e-02   3.08162255e-02]
 [  6.93657970e+00   3.14008688e+00   1.02851599e-01   3.96611266e-02]
 [  8.49295040e+00   3.94730094e+00   8.99398479e-02   7.60969188e-02]
 [  2.01849250e+01   8.62584092e+00   8.75722302e-02   6.17109672e-02]
 [  2.22570710e+01   1.00291292e+01   1.20918359e-01   1.07250131e-01]
 [  2.82496660e+01   1.27882133e+01   1.08438172e-01   1.58723714e-01]
 [  5.89170270e+01   2.55268510e+01   1.31990966e-01   1.61599514e-01]]

使用方法.astype(float)并没有改变结果,而.round(4)返回的是:

[[  7.47200000e-01   3.71700000e-01   1.16700000e-01   1.22000000e-02]
 [  2.79280000e+00   1.31150000e+00   7.44000000e-02   3.08000000e-02]
 [  6.93660000e+00   3.14010000e+00   1.02900000e-01   3.97000000e-02]
 [  8.49300000e+00   3.94730000e+00   8.99000000e-02   7.61000000e-02]
 [  2.01849000e+01   8.62580000e+00   8.76000000e-02   6.17000000e-02]
 [  2.22571000e+01   1.00291000e+01   1.20900000e-01   1.07300000e-01]
 [  2.82497000e+01   1.27882000e+01   1.08400000e-01   1.58700000e-01]
 [  5.89170000e+01   2.55269000e+01   1.32000000e-01   1.61600000e-01]]

我只是想要简单的显示 0.7472 0.3717 等等。

2 个回答

0

我对numpy数组不是很了解,但我在做一个Python项目的时候也遇到了同样的问题。

你可以看看Decimal类,具体内容可以在这个链接找到:http://docs.python.org/library/decimal.html

不过我不确定numpy里有没有这个类。

10

numpy.set_string_function 这个函数可以用来改变数组的字符串表示方式,也就是说,你可以自定义数组在显示时的样子。

另外,你还可以使用 numpy.set_print_options 来改变默认的数字显示精度,并且可以关闭小数字以科学计数法显示的功能。

以下是 set_print_options 的一些示例:

>>> np.set_printoptions(precision=4)
>>> print np.array([1.123456789])
[ 1.1235]

撰写回答