Как я могу получить объект 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

Другие вопросы по тегам