我写了一个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'来保存字符串并同时浮动。
如何解决这个问题?
答案 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