Numpy.savetxt在此期间保存字符串和浮点数并保持浮点数的精度

时间:2015-01-13 08:59:06

标签: python csv numpy

我写了一个python脚本,

import numpy

a = 8.3
b = 8.29993191
c = abs(a - b)
print c
d = numpy.array(c)
e = ['value']
f = numpy.vstack((e, d))
print f
g = ['valuesssssssssssss']
h = numpy.vstack((g, d))
print h

numpy.savetxt('2k.csv', f, '%s', delimiter = ',')

这是输出,

6.8090000001e-05
[['value']
 ['6.809']]
[['valuesssssssssssss']
 ['6.8090000001e-05']]

显然,我要保存到csv文件中的float的精度取决于字符串的长度,因为我需要使用'%s'来保存字符串并同时浮动。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

在这一行:

f = numpy.vstack((e, d))

vstack正在将d的类型强制转换为e的类型。您可以通过打印f.dtype来检查这一点。

您应该像这样构建f

f = np.zeros(1,dtype=('|S5, float64'))
f[0] = e[0],d

如果您不理解上面的一行,请参阅结构化数组专门针对this段的文档。

在打印f时,您可以选择其他格式说明符。使用15数字和科学记数法,您可以选择:

np.savetxt('2k.csv', f, fmt = ('%s','%.15e'),delimiter = ',')

生成的文件是

# cat 2k.csv
value,6.809000000096432e-05

要在字符串下保存数字,请使用savetxt的自定义格式:

np.savetxt('2k.csv', f, fmt = '%s\n%.15e')

输出:

# cat 2k.csv
value
6.809000000096432e-05