【问题标题】:numpy savetxt only saving to 3 significant figuresnumpy savetxt 只保存到 3 个有效数字
【发布时间】:2016-05-09 01:01:25
【问题描述】:

我有一个代码,它使用 np.savetxt 来保存其中包含浮点数和字符串的数组。但是当我保存它们时,它们只保存到 3 个有效数字。当我打印z 时,它给了我完整的浮动,所以他们的问题是当我保存它时。这是什么原因造成的?例如z[0]=(55798.879999999997, 14.08, 'NAN'),但是当我阅读文件时,它说557 14. NAN

time=[]
Um=[]
Bm=[]
for j in range(len(h)):
    ee=np.where(h[j]==U[0])
    if len(U[0][ee[0]])!=0:
        time.append(np.mean(U[0][ee[0]].astype(np.float)))
        Um.append(np.mean(U[1][ee[0]].astype(np.float)))
        Bm.append('NAN')
        #print 'U=',U[0][ee[0]],U[1][ee[0]]
    gg=np.where(h[j]==B[0])
    if len(B[0][gg[0]])!=0:
        time.append(np.mean(B[0][gg[0]].astype(np.float)))
        #print 'B=',B[0][gg[0]],B[1][gg[0]]
        Um.append('NAN')
        Bm.append(np.mean(B[1][gg[0]].astype(np.float)))



z=zip(time,U,B)

np.savetxt('file.txt',z,fmt='%.4s')

【问题讨论】:

  • 请提供numpy变量的dtype。
  • U.dtype=|S8, B.dtype=|S10
  • 我无法让它与 np.savetxt 一起使用,但我只使用了 file.write
  • 好的,如果这解决了问题,我应该调查一下。如果是这样,您能否提供 U、B 和 h 的示例数据。
  • fmt 进行实验。想象一下你正在写fmt%tuple(z[0,:]) - 格式化一行z

标签: python numpy


【解决方案1】:

savetxt 使用类似于

的表达式逐行写入您的数组
 f.write(fmt % tuple(row))

其中fmt 派生自您的输入参数。在您的示例中,我希望 fmt 类似于

In [179]: '%.3s %.3s %.3s'%(55798.879999999997, 14.08, 'NAN')
Out[179]: '557 14. NAN'

如果 fmt 包含正确的浮点格式,您将获得:

In [174]: '%f, %f, %s'%(55798.879999999997, 14.08, 'NAN')
Out[174]: '55798.880000, 14.080000, NAN'

In [175]: np.save('file.txt', z, fmt='%f, %f, %s')

阅读savetxt 文档以获取有关格式的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 2014-02-07
    • 2019-04-10
    • 2018-09-03
    相关资源
    最近更新 更多