优化Python代码以从文本文件读取多个大矩阵

问题描述 投票:0回答:1

我有一个数值模拟,它会输出一个文本文件,其中包含一系列包含复杂条目的方阵。它们看起来像这样:

 (#,#)   (#,#)   (#,#)
 (#,#)   (#,#)   (#,#)
 (#,#)   (#,#)   (#,#)
-----

 (#,#)   (#,#)   (#,#)
 (#,#)   (#,#)   (#,#)
 (#,#)   (#,#)   (#,#)
-----

...

我想要一种快速读取此文件并将矩阵作为 numpy 数组存储在列表中的方法。我编写了以下Python代码来尝试解决这个问题

with open(f'fort.{n}', 'r') as f:
    l = [[num for num in line.split(' ') if num != ''] for line in f]

l = list(filter((l[-2]).__ne__, l))

l = [[num for num in line if num != '\n'] for line in l]
l = [[split(num) for num in line] for line in l]

l = list(filter(([['-----\n']]).__ne__, l))

l = [[float(num[0])+1j*float(num[1]) for num in line] for line in l]

Solutions = []
for i in range(len(l)):
    if (i+1)%160 == 0:
        Solutions.append(l[i-159:i+1])

但是输出文件包含数百个 160x160 矩阵,而我的程序花费了大部分运行时间来读取它们。我想优化这个过程,但不知道如何做。

python matrix optimization physics
1个回答
0
投票

正如 @dankal444 在他的评论中指出的那样,.npy 格式更适合我想要的功能,即将数据从 Fortran 程序传输到分析它的 Python 脚本。考虑到这一点,我找到了一个 module,它可以让你将 Fortran 数组编写为 .npy 文件。它看起来与在未格式化的二进制文件中写入数组一样快。

© www.soinside.com 2019 - 2024. All rights reserved.