我有一个嵌套的Python列表,看起来像下面这样:
my_list = [[3.74, 5162, 13683628846.64, 12783387559.86, 1.81],
[9.55, 116, 189688622.37, 260332262.0, 1.97],
[2.2, 768, 6004865.13, 5759960.98, 1.21],
[3.74, 4062, 3263822121.39, 3066869087.9, 1.93],
[1.91, 474, 44555062.72, 44555062.72, 0.41],
[5.8, 5006, 8254968918.1, 7446788272.74, 3.25],
[4.5, 7887, 30078971595.46, 27814989471.31, 2.18],
[7.03, 116, 66252511.46, 81109291.0, 1.56],
[6.52, 116, 47674230.76, 57686991.0, 1.43],
[1.85, 623, 3002631.96, 2899484.08, 0.64],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32],
[13.76, 1227, 1737874137.5, 1446511574.32, 4.32]]
字符串
然后我导入Numpy,并将打印选项设置为(suppress=True)
。当我创建一个数组时:
my_array = numpy.array(my_list)
型
我无论如何也不能压制科学记数法:
[[ 3.74000000e+00 5.16200000e+03 1.36836288e+10 1.27833876e+10
1.81000000e+00]
[ 9.55000000e+00 1.16000000e+02 1.89688622e+08 2.60332262e+08
1.97000000e+00]
[ 2.20000000e+00 7.68000000e+02 6.00486513e+06 5.75996098e+06
1.21000000e+00]
[ 3.74000000e+00 4.06200000e+03 3.26382212e+09 3.06686909e+09
1.93000000e+00]
[ 1.91000000e+00 4.74000000e+02 4.45550627e+07 4.45550627e+07
4.10000000e-01]
[ 5.80000000e+00 5.00600000e+03 8.25496892e+09 7.44678827e+09
3.25000000e+00]
[ 4.50000000e+00 7.88700000e+03 3.00789716e+10 2.78149895e+10
2.18000000e+00]
[ 7.03000000e+00 1.16000000e+02 6.62525115e+07 8.11092910e+07
1.56000000e+00]
[ 6.52000000e+00 1.16000000e+02 4.76742308e+07 5.76869910e+07
1.43000000e+00]
[ 1.85000000e+00 6.23000000e+02 3.00263196e+06 2.89948408e+06
6.40000000e-01]
[ 1.37600000e+01 1.22700000e+03 1.73787414e+09 1.44651157e+09
4.32000000e+00]
[ 1.37600000e+01 1.22700000e+03 1.73787414e+09 1.44651157e+09
4.32000000e+00]]
型
如果我直接创建一个简单的numpy数组:
new_array = numpy.array([1.5, 4.65, 7.845])
型
我没有问题,它打印如下:
[ 1.5 4.65 7.845]
型
有人知道我的问题是什么吗?
4条答案
按热度按时间0ejtzxu11#
这就是你需要的:
字符串
这里是documentation,它说
suppress
:bool
,* 可选 *如果为True,则始终使用定点计数法打印浮点数,在这种情况下,当前精度等于零的数字将打印为零。如果为False,则当最小数字的绝对值为1e3时使用科学计数法< 1e-4 or the ratio of the maximum absolute value to the minimum is >。默认值为False。
在最初的问题中,“直接”创建的数组和原始的“大”数组之间的区别在于,大数组包含非常大的数字(例如
1.44651157e+09
),因此NumPy为它选择科学计数法,除非它被抑制。sqougxex2#
Python Force-在打印numpy ndarrays、wrangle文本对齐、舍入和打印选项时抑制所有指数表示法:
下面是对正在发生的事情的解释,滚动到底部查看代码演示。
将参数
suppress=True
传递给函数set_printoptions
只适用于分配给它的默认8个字符空间内的数字,如下所示:字符串
但是,如果你传入一个大于8个字符的数字,指数符号会再次被使用,就像这样:
型
numpy有一个选择,要么把你的数字切成两半,从而歪曲它,要么强迫指数符号,它选择后者。
下面
set_printoptions(formatter=...)
来帮助指定打印和舍入的选项。告诉set_printoptions
只打印一个空浮点数:型
我们已经强制抑制了指数表示法,但它没有四舍五入或对齐,因此指定额外的格式选项:
型
在ndarrays中强制抑制所有指数概念的缺点是,如果你的ndarray中有一个接近无穷大的巨大浮点值,并且你打印它,你会得到一个充满数字的页面。
完整示例Demo 1:
型
印刷品:
型
完整示例Demo 2:
型
印刷品:
型
请注意,舍入在2个单位精度下是一致的,并且在非常大的
e+x
和非常小的e-x
范围内都抑制了指数表示法。oo7oh9g93#
对于1D和2D阵列,您可以使用np.savetxt使用特定格式字符串进行打印:
字符串
在v1.3中,numpy.set_printoptions或numpy.array2string的选项非常笨重和有限(例如,无法抑制对大数字的科学计数法)。看起来这将在未来版本中发生变化,numpy.set_printoptions(formatter=..)和numpy.array2string(style=..)。
amrnrhlw4#
您可以编写一个函数,将科学计数法转换为常规计数法,例如
字符串