【问题标题】:numpy block scientific notationnumpy 块科学记数法
【发布时间】:2017-02-02 22:12:34
【问题描述】:
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 文件,当我这样做时,它仍然使用科学记数法写入文件。我该怎么办?

【问题讨论】:

    标签: python python-3.x numpy


    【解决方案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 控制浮点格式。

    【讨论】:

    • 谢谢,它正在终端上运行,但除此之外,我会将数组写入 csv 文件,当我这样做时,它仍然使用科学记数法编写
    • 使用 np.savetxt(filename, arr, fmt='%g') 创建 CSV。 fmt 参数允许您控制浮点格式。
    • 粗略地说,g 格式尽可能以简单、易于阅读的格式呈现浮点数。 G 格式与 g 相同,只是在需要指数格式时使用大写 E 而不是小写 e
    猜你喜欢
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2014-03-20
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多