我最近开始使用
SLEPc
对角化大型稀疏矩阵,利用 MPI
。一切正常,除了最后我想将特征向量写入文件时。我这样做:
PetscViewerASCIIOpen(PETSC_COMM_WORLD, "./data/eigvecs.txt", &viewer);
PetscViewerPushFormat(viewer, PETSC_VIEWER_ASCII_PYTHON);
EPSVectorsView(eps, viewer);
我用
mpiexec -n 3 ./app
运行我的代码。生成的文件eigvecs.txt
看起来像这样:
Vec Object: Xr0_EPS_0x84000004_0 3 MPI processes
type: mpi
Process [0]
-0.909229
0.415619
Process [1]
-0.00206267
0.00410161
Process [2]
0.0145993
0.01813
Vec Object: Xi0_EPS_0x84000004_0 3 MPI processes
type: mpi
Process [0]
0.
0.
Process [1]
0.
0.
Process [2]
0.
0.
所以每个特征向量的分量是并行打印的,不同的特征向量之间用一串0隔开,也是并行打印的。
我的问题:有没有更好的方法来做到这一点?因为稍后我想在
python
或 julia
中读取此文件并进行一些计算。如果不是,以 python
或 julia
阅读此文件的最佳方式是什么?
谢谢!
不是转储到 ascii 并在输入时解析它,而是使用
PETSCVIEWERHDF5
转储 hdf5 文件,并使用 python 的 hdf5 模块读取文件。这样会更快,并且不会产生转换损失。