将矩阵传递给共享对象时内存使用量翻倍

Memory usage doubled when passing matrix to shared object

我有一组线性方程,其中 A x = b,A 是一个大矩阵,b 也是已知的。 矩阵A设置为python。 现在我想反转矩阵 A 以获得 x.

A 和 b 通过共享对象传递给 Fortran 90 程序。我使用 numpy.f2py 编译了 Fortran 程序:

import numpy.f2py.f2py2e as f2py2e
import sys, os
sys.argv += "-lmkl_rt -c -m MKL_MODULE MKL_WRAPPER.f90".split()
f2py2e.main() 

最后,我调用了 f90 子程序:

MKL_MODULE.mkl_wrapper.call_dgelsd(A, b, np.shape(A)[0], np.shape(A)[1])

当调用 fortran 程序时,内存使用量加倍,显然是由于矩阵 A 和 b 的内部副本。 但是,一旦我有了向量 x,我就不再对 A 或 b 感兴趣了。 有什么办法可以避免内部复制并将 A 传递给 Fortran 程序吗?

我已经有了将 A 和 b 保存到 HD 并从 Fortran 程序读取它的想法,但这需要很长时间,而且对于我正在处理的大小的矩阵来说并不是一个真正的选择。

如果数组是 F 序的,则不会进行内部复制

[How to force numpy array order to fortran style? 到 Fortran 风格][1]