【问题标题】:python numpy savetxtpython numpy savetxt
【发布时间】:2012-08-17 00:43:37
【问题描述】:

谁能指出我在这里做错了什么?

import numpy as np

a = np.array([1,2,3,4,5],dtype=int)
b = np.array(['a','b','c','d','e'],dtype='|S1')

np.savetxt('test.txt',zip(a,b),fmt="%i %s")

输出是:

Traceback (most recent call last):
  File "loadtxt.py", line 6, in <module>
    np.savetxt('test.txt',zip(a,b),fmt="%i %s")
  File "/Users/tom/Library/Python/2.6/site-packages/numpy/lib/io.py", line 785, in savetxt
    fh.write(format % tuple(row) + '\n')
TypeError: %d format: a number is required, not numpy.string_

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    你需要以不同的方式构造你的数组:

    z = np.array(zip([1,2,3,4,5], ['a','b','c','d','e']), dtype=[('int', int), ('str', '|S1')])
    np.savetxt('test.txt', z, fmt='%i %s')
    

    当您传递一个序列时,savetext 执行asarray(sequence) call 并且结果数组的类型为|S4,即所有元素都是字符串!这就是您看到此错误的原因。

    【讨论】:

      【解决方案2】:

      如果要保存 CSV 文件,还可以使用函数 rec2csv(包含在 matplotlib.mlab 中)

      >>> from matplotlib.mlab import rec2csv
      >>> rec = array([(1.0, 2), (3.0, 4)], dtype=[('x', float), ('y', int)])
      >>> rec = array(zip([1,2,3,4,5], ['a','b','c','d','e']), dtype=[('x', int), ('y', str)])
      >>> rec2csv(rec, 'recordfile.txt', delimiter=' ')
      

      希望有一天 pylab 的开发人员能够实现对编写 csv 文件的体面支持。

      【讨论】:

        【解决方案3】:

        我认为您遇到的问题是您正在通过格式化字符串传递元组,并且它无法使用 %i 解释元组。尝试使用 fmt="%s",假设这是您正在寻找的输出:

        1 a
        2 b
        3 c
        4 d
        5 e
        

        【讨论】:

        • 那是错误的。 fmt="%s" 工作的原因完全不同,fmt="%s %s" 也工作,顺便说一句。
        • 你说得对,我一发布就意识到它有效,但不是我想的那样。我的错。 SilentGhost 的帖子要好得多。谢谢。
        猜你喜欢
        • 2017-04-05
        • 2023-04-05
        • 2018-12-02
        • 1970-01-01
        • 2020-12-10
        • 2014-02-07
        • 2019-03-18
        • 1970-01-01
        相关资源
        最近更新 更多