C++ C++;犰狳访问三角形矩阵元
访问犰狳矩阵的上三角元素或下三角元素的最有效方法(即平衡内存和速度)是什么?我知道我可以为元素提供一个整数向量,但当矩阵变得非常大时,我希望避免携带另一个大向量。或者有没有一种有效的方法可以快速创建上/下三角指数 例如,使用5x5矩阵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,
// 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代码>