У меня есть линейный набор уравнений, где A x = b, а A — большая матрица, а b также известна. Матрица A настроена с помощью python. Теперь я хочу инвертировать матрицу A, чтобы получить x.
A и b передаются программе на Fortran 90 через общий объект. Я скомпилировал программу на Фортране, используя numpy.f2py:
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])
При вызове программы на фортране использование памяти удваивается, видимо, из-за внутренней копии матрицы A и b. Однако, когда у меня есть вектор x, меня больше не интересуют A или b. Есть ли способ избежать этой внутренней копии и передачи A программе на фортране?
У меня уже была идея сохранить A и b на HD и прочитать их из программы Fortran, но это занимает очень много времени и не подходит для матриц того размера, с которым я имею дело.
F
упорядоченным? - person hpaulj   schedule 30.10.2016