簡體   English   中英

C++ Armadillo 訪問三角矩陣元素

[英]C++ Armadillo Access Triangular Matrix Elements

訪問犰狳矩陣的上三角或下三角元素的最有效(即平衡內存和速度)方法是什么? 我知道我可以為元素提供一個整數向量,但是當矩陣變得非常大時,我想避免攜帶另一個大向量。 或者有沒有一種有效的方法來快速創建下/上三角指數?

例如使用 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。

要檢查下三角形中的所有元素是否都為零:

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

Armadillo 9.900 具有功能trimatu_ind()trimatl_ind() 這些函數提供矩陣的上三角部分和下三角部分的索引。 這些索引可以與.elem()一起使用來訪問上/下三角形部分中的元素。

還有函數.is_trimatu().is_trimatl()用於檢查矩陣是否為上/下三角。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM