访问犰狳矩阵的上三角或下三角元素的最有效(即平衡记忆和速度)方法是什么?我知道我可以为元素提供整数向量,但随着矩阵变得非常大,我想避免携带另一个大向量。或者是否有一种快速创建下/上三角指数的有效方法?
例如,使用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 :(得分:2)
检查下三角形中的所有元素是否等于零:
bool all_zero = all( X.elem(find(trimatl(X))) == 0 );
答案 1 :(得分:0)
Armadillo 9.900具有功能trimatu_ind()和trimatl_ind()。这些函数提供矩阵的上部和下部三角形部分的索引。这些索引可以与.elem()一起使用,以访问上/下三角形部分中的元素。
还有.is_trimatu()和.is_trimatl()函数,用于检查矩阵是上三角还是下三角。