我有一个数值模拟,它会输出一个文本文件,其中包含一系列包含复杂条目的方阵。它们看起来像这样:
(#,#) (#,#) (#,#)
(#,#) (#,#) (#,#)
(#,#) (#,#) (#,#)
-----
(#,#) (#,#) (#,#)
(#,#) (#,#) (#,#)
(#,#) (#,#) (#,#)
-----
...
我想要一种快速读取此文件并将矩阵作为 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 矩阵,而我的程序花费了大部分运行时间来读取它们。我想优化这个过程,但不知道如何做。
正如 @dankal444 在他的评论中指出的那样,.npy 格式更适合我想要的功能,即将数据从 Fortran 程序传输到分析它的 Python 脚本。考虑到这一点,我找到了一个 module,它可以让你将 Fortran 数组编写为 .npy 文件。它看起来与在未格式化的二进制文件中写入数组一样快。