C++ C++;犰狳访问三角形矩阵元

C++ C++;犰狳访问三角形矩阵元,c++,matrix,armadillo,C++,Matrix,Armadillo,访问犰狳矩阵的上三角元素或下三角元素的最有效方法(即平衡内存和速度)是什么?我知道我可以为元素提供一个整数向量,但当矩阵变得非常大时,我希望避免携带另一个大向量。或者有没有一种有效的方法可以快速创建上/下三角指数 例如,使用5x5矩阵 // C++11 Initialization arma::mat B = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,

访问犰狳矩阵的上三角元素或下三角元素的最有效方法(即平衡内存和速度)是什么?我知道我可以为元素提供一个整数向量,但当矩阵变得非常大时,我希望避免携带另一个大向量。或者有没有一种有效的方法可以快速创建上/下三角指数

例如,使用5x5矩阵

// 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。

要检查下三角形中的所有元素是否都等于0:

bool all_zero = all( X.elem(find(trimatl(X))) == 0 );

犰狳9.900具有以下功能和功能。这些函数提供矩阵上下三角部分的索引。这些索引可用于访问上/下三角部分的元素


还有一些函数,用于检查矩阵是否为上/下三棱柱。

这很接近,但也包括对角线。有没有办法只看三角形元素?例如,如果任何对角元素不为零,则当3x3对角矩阵对于上三角形或下三角形应为真时,则会显示为假。据我所知,三角形矩阵的定义始终包括对角矩阵。例如,请参见和wiki中的定义将上下三角矩阵称为主对角线上下的所有元素均等于零。在我看来,这并不意味着它们应该包括对角线。引用文章:“如果主对角线上方的所有条目都为零,则为下三角形”。换句话说,下三角矩阵包含对角线。中的定义相同,其中明确包含对角线元素。可以创建一个临时值,将对角线设置为零:
mat Y=X;Y.diag().zeros();bool all_zero=all(Y.elem(find(trimatl(Y)))=0