Python NumPy 保存文本文件
有人能告诉我我哪里做错了吗?
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_
3 个回答
1
我觉得你遇到的问题是,你在格式化字符串中传递了元组,但它无法用 %i 来理解这个元组。你可以试试用 fmt="%s",假设这就是你想要的输出:
1 a
2 b
3 c
4 d
5 e
4
如果你想保存一个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文件。
12
你需要以不同的方式构建你的数组:
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)
,这样得到的数组类型是 |S4
,也就是说所有的元素都是字符串!这就是你看到这个错误的原因。