我有一个文件,其科学数据用科学记数法表示。格式如下,总是有6行数字串在一起,
4.748257444721457E-004
-4.058788876602824E-006
-1.494658656964534E-004
4.686186383664201E-006
3.840708360798801E-006
-3.237680480600605E-005
-3.237680480600605E-005
5.290165586028430E-005
-1.312378015891650E-005
-9.693957759497108E-006
3.184131106435972E-005
我正在尝试从上面构建一个矩阵(在python中)到表单,如下所示;
4.748257444721457E-004 -3.237680480600605E-005
-4.058788876602824E-006 5.290165586028430E-005
-1.494658656964534E-004 -1.312378015891650E-005
4.686186383664201E-006 -9.693957759497108E-006
3.840708360798801E-006 3.184131106435972E-005
我想知道在python中是否可以使用矩阵这样的构造(然后可以用于进一步的数学分析)?
我试过这种方法。
将数字转换为十进制,然后使用bash脚本创建一个矩阵,然后在python中加载为txt。
但是,我不想摆脱浮点数(导致精度损失),因此我想到一种循环方法来生成这个矩阵。实际数据集具有54x54值。
答案 0 :(得分:1)
它可能对你有帮助。
import numpy as np
matrix = []
row = []
with open("input.txt") as f:
for line in f:
line = line.rstrip('\n')
if not line:
if len(row) != 0:
matrix.append(row)
row = []
continue
row.append(float(line))
if len(row) != 0:
matrix.append(row)
matrix = np.asarray(matrix).T
print(matrix)
打印:
[[ 4.74825744e-04 -3.23768048e-05]
[ -4.05878888e-06 -3.23768048e-05]
[ -1.49465866e-04 5.29016559e-05]
[ 4.68618638e-06 -1.31237802e-05]
[ 3.84070836e-06 -9.69395776e-06]
[ 3.84070836e-06 3.18413111e-05]]
您还可以通过遍历行和列来打印矩阵。
for row in range(matrix.shape[0]):
for column in range(matrix.shape[1]):
print(matrix[row][column], end=' ')
print()
打印:
0.000474825744472 -3.2376804806e-05
-4.0587888766e-06 -3.2376804806e-05
-0.000149465865696 5.29016558603e-05
4.68618638366e-06 -1.31237801589e-05
3.8407083608e-06 -9.6939577595e-06
3.8407083608e-06 3.18413110644e-05
您还可以科学的格式精确打印。
print('{:.4e}'.format(matrix[row][column]), end=' ')
输入文件 - input.txt
包含:
4.748257444721457e-004
-4.058788876602824e-006
-1.494658656964534e-004
4.686186383664201e-006
3.840708360798801e-006
3.840708360798801e-006
-3.237680480600605e-005
-3.237680480600605e-005
5.290165586028430e-005
-1.312378015891650e-005
-9.693957759497108e-006
3.184131106435972e-005