在 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=',')