将数据帧转换为numpy数组会导致所有数字都以科学计数法打印

时间:2015-05-04 07:02:40

标签: python arrays numpy

要使用scikit进行交叉验证,我尝试将数据帧提前转换为numpy数组。所以我尝试了函数df.as_matrix(),事实证明数据看起来很奇怪。我想知道这是否正常。为什么必须以这种奇怪的格式显示?

例如:585变为5.85000000e + 02,和                0变为0.00000000e + 00

1 个答案:

答案 0 :(得分:0)

如果数组中的大/小值需要科学记数法是合理的,则会发生这种情况:在这种情况下,numpy以科学记数法打印所有值。例如:

In [65]: z
Out[65]:
array([[  1.00000000e+10,   1.00000000e+00,   2.00000000e+00],
       [  2.00000000e+00,   1.00000000e+00,   1.00000000e+00]])

In [66]: z[0,0]
Out[66]: 10000000000.0

In [67]: z[0,0]=1

In [68]: z
Out[68]:
array([[ 1.,  1.,  2.],
       [ 2.,  1.,  1.]])

可以使用np.set_printoptions修改此行为,但您需要弄清楚您想要的行为。如果你的数字很大,suppress=实际上并不起作用。有关详情,请参阅this answer

基本上,numpy希望您的数字始终打印,而不是以最方便的格式打印。除了编写自己的浮点格式化程序并将其传递给set_printoptions之外,似乎没有一种简单的方法可以改变它。

实际上,试试这个:

In [102]: np.set_printoptions(formatter={'float':"{:6.5g}".format})

In [103]: z
Out[103]:
array([[  1e+10,       1,       2],
       [      2,       1,       1]])

这实际上告诉numpy格式化浮点数,因为它们由format格式化"{:6.5g}" Thread.currentThread()作为format specification