Каким будет самый эффективный способ (например, балансовая память и скорость) для доступа к верхним или нижним треугольным элементам матрицы Armadillo? Я знаю, что могу предоставить вектор целых чисел для элементов, но по мере того, как матрицы становятся очень большими, я бы хотел избежать переноса другого большого вектора. Или существует эффективный способ быстрого создания нижних/верхних треугольных индексов?C++ Armadillo Access Треугольные матричные элементы
Например, матрица 5х5
// C++11 Initialization
arma::mat B = { 1, 2, 3, 4, 5,
6, 7, 8, 9, 10,
11, 12, 13, 14, 15,
16, 17, 18, 19, 20,
21, 22, 23, 24, 25 };
B.reshape(5,5);
// the matrix
//1 6 11 16 21
//2 7 12 17 22
//3 8 13 18 23
//4 9 14 19 24
//5 10 15 20 25
Я хотел бы вывести элементы в нижнем треугольнике, где в результате вектор будет:
2 3 4 5 8 9 10 14 15 20
Единственное решение, которое я могу думать о праве теперь используется объект uvec
. Например:
arma::uvec idx {1,2,3,4,7,8,9,13,14,19);
arma::vec lower_elems = B.elem(idx);
Конечный объект не обязательно должен быть вектором. Мне просто нужно иметь доступ к элементам для различных сравнений. В качестве простого примера предположим, что я хотел бы проверить, если все они равны 0.
Это близко, но он также включает в себя диагональ. Есть ли способ смотреть только на треугольные элементы? Например, диагональная матрица 3x3 появляется как ложная, когда она должна быть верной для верхнего или нижнего треугольника, если любой из диагональных элементов не равен нулю. – cdeterman
Насколько я знаю, определение треугольных матриц всегда включает диагональ. См. Например, определения в [MathWorld] (http://mathworld.wolfram.com/TriangularMatrix.html) и [Википедия] (http://en.wikipedia.org/wiki/Triangular_matrix) – mtall
wiki относится к верхней и нижней треугольные матрицы, как все элементы ** ниже ** и ** выше **, основная диагональ равна нулю. Мне не кажется, что они должны включать диагональ. – cdeterman