numpy block科学记数法

时间:2017-02-02 08:18:18

标签: python python-3.x numpy

import numpy as np
row_num=24983
col_size = 102
arr = np.zeros((row_num,col_num))
arr[:,0]= np.arange(row_num)

当我写它时,它给了我科学记数法数组,

array([[  0.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       [  1.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       [  2.00000000e+00,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       ..., 
       [  2.49800000e+04,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       [  2.49810000e+04,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       [  2.49820000e+04,   0.00000000e+00,   0.00000000e+00, ...,
          0.00000000e+00,   0.00000000e+00,   0.00000000e+00]])

但我不想要它。我想要正常的numpy数组,

array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
       [ 1.,  0.,  0., ...,  0.,  0.,  0.],
       [ 2.,  0.,  0., ...,  0.,  0.,  0.],
       ..., 
       [ 24980.,  0.,  0., ...,  0.,  0.,  0.],
       [ 24981.,  0.,  0., ...,  0.,  0.,  0.],
       [ 24982.,  0.,  0., ...,  0.,  0.,  0.]])

编辑:我知道np.set_printoptions但我会将数组写入csv文件,当我这样做时,它仍然用科学记数法写入文件。我该怎么办?

1 个答案:

答案 0 :(得分:1)

要控制数组的显示方式,可以使用np.set_printoptions设置浮点格式化功能:

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

In [14]: arr
Out[14]: 
array([[0, 0, 0, ..., 0, 0, 0],
       [1, 0, 0, ..., 0, 0, 0],
       [2, 0, 0, ..., 0, 0, 0],
       ..., 
       [24980, 0, 0, ..., 0, 0, 0],
       [24981, 0, 0, ..., 0, 0, 0],
       [24982, 0, 0, ..., 0, 0, 0]])

g格式的含义是described here。虽然g格式通常成功地以人类可读的方式呈现简单的浮点数而没有指数表示法,但它并不保证从不使用指数表示法。

因此,您可以使用f格式, 例如np.set_printoptions(formatter={'float': '{:.2f}'.format})如果你愿意的话 以固定的精度呈现所有浮子。这保证不使用指数表示法。

或者,您可以使用

In [25]: np.set_printoptions(suppress=True)

In [26]: arr
Out[26]: 
array([[     0.,      0.,      0., ...,      0.,      0.,      0.],
       [     1.,      0.,      0., ...,      0.,      0.,      0.],
       [     2.,      0.,      0., ...,      0.,      0.,      0.],
       ..., 
       [ 24980.,      0.,      0., ...,      0.,      0.,      0.],
       [ 24981.,      0.,      0., ...,      0.,      0.,      0.],
       [ 24982.,      0.,      0., ...,      0.,      0.,      0.]])

suppress=True告诉np.set_printoptions使用科学记数法禁止打印小浮点值。

要创建CSV文件,请使用

np.savetxt(filename, arr, fmt='%g')

The fmt parameter允许您使用printf-style string formatting控制浮动格式。