Как я могу получить объект LaVectorDouble, который является подматрицей представления LaGenMatDouble? - PullRequest
1 голос
/ 22 июня 2009

Мы используем 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 ]

1 голос
/ 24 июня 2009

Я подозреваю, что эта процедура делает глубокую копию данных:

http://lapackpp.sourceforge.net/html/classLaVectorDouble.html#be11700fe7c277501329b2d23f485630

Эта процедура ref () может позволить вам поддерживать общую память:

http://lapackpp.sourceforge.net/html/classLaVectorDouble.html#191850a7e8993a977a3a545b87dc7528

0 голосов
/ 26 июня 2009

Ответ - использовать функцию ref.

LaVectorDouble b;
b.ref(W(LaIndex(0,2), LaIndex(0,0)));

Все остальные функции копируют (как конструктор, = и копируют) или дают неправильный класс (как конструктор с индексами) Функция ref ссылается на память.

...