更改文本文件中浮点数的一整列无效文字

Changing one entire column of invalid literals for floats in text file

一个程序完成了 运行ning 并生成了一个输出文本文件,我基本上在其中存储了一个二维矩阵的内容。

问题是由于某种原因,代码的 运行 出错了,结果我得到了文件的整个第二列的奇怪值,其中有 "numbers" 这种形式 -0.526254956249307482-311.

我想替换该列,例如使用

import numpy as np
matrix = np.loadtxt("outputfile.txt", unpack=True)
matrix[1, :] = 0.

应该将该列的值人为设置为 0,我会很高兴。

可惜这个方法不行,说

invalid literal for float(): -0.526254956249307482-311

当它遇到文件中的第一个 "strange" 数字时。有什么想法吗?

我在下面写下文件的一小段摘录(前三行,只是为了展示它的样子)

    0.100000000000000111E-02   -0.526254956249307482-311 0.764784798622131334E+00    0.262873337864875811E+01    0.208378931879997231E-01    0.833944082260131836E+00   

    0.100000000000000111E-02   -0.526254956199900917-311    0.295833469629287749E+00    0.452671760320663452E+01    0.251516385376453384E-01    0.114372291564941397E+01   

    0.100000000000000111E-02   -0.526254956199900917-311    0.352831211090087915E+00    0.303885749578475917E+01    0.219180066883564000E-01    0.949515032768249556E+00   

您可以为索引 1 处的列提供自定义转换器,并且 return 所有值都为零:

import numpy as np
matrix = np.loadtxt('np_nan.txt', unpack=True, converters={1: lambda x: 0})

现在 matrix 是:

array([[  1.00000000e-03,   1.00000000e-03,   1.00000000e-03],
       [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
       [  7.64784799e-01,   2.95833470e-01,   3.52831211e-01],
       [  2.62873338e+00,   4.52671760e+00,   3.03885750e+00],
       [  2.08378932e-02,   2.51516385e-02,   2.19180067e-02],
       [  8.33944082e-01,   1.14372292e+00,   9.49515033e-01]])

您也可以考虑使用 NaN 而不是零:

matrix = np.loadtxt('np_nan.txt', unpack=True, converters={1: lambda x: np.nan})

现在 matrix 是:

array([[  1.00000000e-03,   1.00000000e-03,   1.00000000e-03],
       [             nan,              nan,              nan],
       [  7.64784799e-01,   2.95833470e-01,   3.52831211e-01],
       [  2.62873338e+00,   4.52671760e+00,   3.03885750e+00],
       [  2.08378932e-02,   2.51516385e-02,   2.19180067e-02],
       [  8.33944082e-01,   1.14372292e+00,   9.49515033e-01]])