我正在尝试使用numpy.savetxt将数据转储为每列的各种格式。
当数据
时data = np.array([[1.111, 2.222, 3.333],
[4.444, 5.555, 6.666],
[7.777, 8.888, 9.999] ])
np.savetxt('data.txt', data,
fmt= ['%i', '%.2f', '%s'], ## <== 1st column, int, 2nd float, 3rd string
delimiter = ',')
一切正常。
但是当数据是:
data = np.array([[1.111, 2.222, 'three'],
[4.444, 5.555, 'six'],
[7.777, 8.888, 'nine'] ])
np.savetxt('data.txt', data,
fmt= ['%i', '%.2f', '%s'], ## <== 1st column, int, 2nd float, 3rd string
delimiter = ',')
它给我一个错误: fh.write(asbytes(格式%tuple(row)+换行符)) TypeError:%d format:需要一个数字,而不是numpy.string _
有人有线索吗?
答案 0 :(得分:3)
查看您创建的数组,它看起来像这样:
array([['1.111', '2.222', 'three'],
['4.444', '5.555', 'six'],
['7.777', '8.888', 'nine']],
dtype='<U5')
正如您所看到的,所有元素都是字符串,这就是您遇到错误的原因。 但是,如果您执行此类操作,则应该可以正常工作。
dt = np.dtype("f, f, U5")
data = np.array([(1.111, 2.222, 'three'), # notice that each row had to be a tuple in my case
(4.444, 5.555, 'six'),
(7.777, 8.888, 'nine')], dtype=dt)
np.savetxt('data.txt', data,
fmt= ['%i', '%.2f', '%s'], ## <== 1st column, int, 2nd float, 3rd string
delimiter = ',')
有关dtypes的更多信息,请点击此处: Data Type Objects
答案 1 :(得分:2)
对于整数,应使用 %d
格式选项代替 %i
:
np.savetxt('test.txt', data, fmt=['%d', '%.2f', '%s'])
加载数组时,您还应正确指定dtype
:
np.genfromtxt('test.txt', dtype=[('col1', int), ('col2', float), ('col3', '|S8')])