2016-10-30 6 views
0

У меня есть линейная система уравнений, где 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, но это занимает очень много времени и на самом деле не является вариантом для матриц размера, с которым я имею дело.

+0

Является ли исходный массив (ы) 'f' заказывали? – hpaulj

+0

Нет, его C заказан. Но преобразование в упорядоченное F не должно быть проблемой. – RoSt

+0

Для перевода из заказа Закажите номер в формате PDF –

ответ

Смежные вопросы