У меня есть линейная система уравнений, где 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 в программу fortran?
У меня уже была идея сохранить A и b в HD и прочитать его из программы Fortran, но это занимает очень много времени и на самом деле не является вариантом для матриц размера, с которым я имею дело.
Является ли исходный массив (ы) 'f' заказывали? – hpaulj
Нет, его C заказан. Но преобразование в упорядоченное F не должно быть проблемой. – RoSt
Для перевода из заказа Закажите номер в формате PDF –