【问题标题】:Saving data using numpy.savetxt使用 numpy.savetxt 保存数据
【发布时间】:2018-07-17 15:13:08
【问题描述】:

我有 numpy 数组 I。我正在使用以下方法将其写入文件:

np.savetxt(fp, I[None], fmt='%e', delimiter=',')

它在文件中写入数组,每个值用逗号分隔。现在我想在 I 之后再追加一列。那么如何在同一行中追加一些非数组数据值。

【问题讨论】:

标签: python file numpy save


【解决方案1】:

最简单的就是把多余的数据串联起来,用%s写来处理文本

In [97]: I = np.arange(5)
In [98]: I[None]
Out[98]: array([[0, 1, 2, 3, 4]])


In [101]: np.savetxt('test',I[None],delimiter=',', fmt='%e')
In [102]: cat test
0.000000e+00,1.000000e+00,2.000000e+00,3.000000e+00,4.000000e+00

现在添加一个文本列:

In [103]: lbl = np.array([['test']])
In [105]: np.hstack((I[None],lbl))
Out[105]: array([['0', '1', '2', '3', '4', 'test']], dtype='<U21')

现在都是字符串,所以你必须用 '%s' 写:

In [106]: np.savetxt('test',_,delimiter=',', fmt='%s')
In [107]: cat test
0,1,2,3,4,test

或者创建一个object dtype 数组,并将自定义 fmt 应用于每一列:

In [108]: lbl = np.array([['test']],object)
In [109]: np.hstack((I[None],lbl))
Out[109]: array([[0, 1, 2, 3, 4, 'test']], dtype=object)
In [110]: np.savetxt('test',_,fmt='%d, %e, %e, %e, %e, %s')
In [111]: cat test
0, 1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00, test

我还建议创建一个结构化数组,尽管此对象 dtype 可能更易于使用。

In [112]: dt = np.dtype('i,f,f,f,f,U10')
In [113]: arr = np.array([tuple(Out[109][0])],dt)
In [114]: arr
Out[114]: 
array([(0, 1., 2., 3., 4., 'test')],
      dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', '<f4'), ('f3', '<f4'), ('f4', '<f4'), ('f5', '<U10')])
In [115]: np.savetxt('test',_,fmt='%d, %e, %e, %e, %e, %s')
In [116]: cat test
0, 1.000000e+00, 2.000000e+00, 3.000000e+00, 4.000000e+00, test

savetxt 迭代输入数组的第一维,并使用您的fmt(或从您的fmt 构造的一个)写入它。如果您对 Python 格式化和文件写入足够熟悉,您也可以这样做 - 并且运行速度一样快。

【讨论】:

    【解决方案2】:

    您可以编辑文本文件并以这种方式添加非数组数据值:

    np.savetxt(fp, I[None], fmt='%e', delimiter=',')
    with open(fp,'a') as f:
        f.write("non-array data values")
    

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 2017-02-23
      • 1970-01-01
      • 2020-07-24
      • 2020-07-09
      • 2015-03-11
      • 2012-06-10
      • 1970-01-01
      • 2013-11-13
      相关资源
      最近更新 更多