在 python 中写入 csv 时限制小数位数
Limit decimals numbers when writing to csv in python
我遍历文件,并为其中的每一个文件计算出一个包含 4000 多个(固定数量)特征的列表。这些特征由函数计算并返回为 numpy.array
我想写一个 CSV 文件,每个文件一行(每行是一个 numpy.array
,包含 4000 多个元素)。
我目前正在使用 Python 的 csv
库,即使我的数组是四舍五入的(感谢 np.around
),CSV 文件包含有很多数字的数字,例如0,302499999999999
而不是0,3025
我知道这可能来自 Python 中的 floating points limitations,但我想知道在输出文件中是否有任何方法可以避免这种情况(通过将其写成字符串?)。
重现问题的代码示例如下:
import numpy as np
import csv
for i in range(10) :
row = np.around(np.random.random(4000), decimals=5)
with open('output.csv', "ab") as fp:
wr = csv.writer(fp, dialect='excel')
wr.writerow(row)
您可以这样使用 numpy.savetxt()
:
import numpy as np
with open('output.csv', 'w') as fh:
for i in range(10): # loop over features
row = np.random.random(4000)
np.savetxt(fh, row.reshape(1, -1), fmt='%.5e', delimiter=',')
我遍历文件,并为其中的每一个文件计算出一个包含 4000 多个(固定数量)特征的列表。这些特征由函数计算并返回为 numpy.array
我想写一个 CSV 文件,每个文件一行(每行是一个 numpy.array
,包含 4000 多个元素)。
我目前正在使用 Python 的 csv
库,即使我的数组是四舍五入的(感谢 np.around
),CSV 文件包含有很多数字的数字,例如0,302499999999999
而不是0,3025
我知道这可能来自 Python 中的 floating points limitations,但我想知道在输出文件中是否有任何方法可以避免这种情况(通过将其写成字符串?)。
重现问题的代码示例如下:
import numpy as np
import csv
for i in range(10) :
row = np.around(np.random.random(4000), decimals=5)
with open('output.csv', "ab") as fp:
wr = csv.writer(fp, dialect='excel')
wr.writerow(row)
您可以这样使用 numpy.savetxt()
:
import numpy as np
with open('output.csv', 'w') as fh:
for i in range(10): # loop over features
row = np.random.random(4000)
np.savetxt(fh, row.reshape(1, -1), fmt='%.5e', delimiter=',')