Как я могу получить объект LaVectorDouble, который является представлением подматрицы LaGenMatDouble?
Мы используем Lapack++ для наших матричных вычислений. Одна из особенностей - использование представлений submatrix; объекты, которые ссылаются на одно и то же место в памяти.
Пример:
LaGenMatDouble W = LaGenMatDouble::rand(3,4);
LaGenMatDouble A = W(LaIndex(0,2), LaIndex(1,3));
LaGenMatDouble b = W(LaIndex(0,2), LaIndex(0,0));
A и b теперь являются подматрицами W.
Как я могу сделать b a LaVectorDouble, чтобы иметь возможность выполнять некоторые вычисления с ним?
2 ответа
Ответ заключается в использовании функции ref.
LaVectorDouble b;
b.ref(W(LaIndex(0,2), LaIndex(0,0)));
Все остальные функции копируют (как конструктор, = и копируют) или дают неправильный класс (как конструктор с индексами). Функция ref ссылается на память.
Я подозреваю, что эта процедура делает глубокую копию данных:
http://lapackpp.sourceforge.net/html/classLaVectorDouble.html
Эта процедура ref() может позволить вам поддерживать общую память:
http://lapackpp.sourceforge.net/html/classLaVectorDouble.html