Armadillo C++ linear algebra library 學習筆記(2)——矩陣的基本操作(1)
阿新 • • 發佈:2019-01-24
1、獲取矩陣的某個元素
A、通過nameMat(i,j)獲取矩陣nameMat的第(i,j)個元素。
B、示例
#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
//1、產生隨機矩陣A,大小為5x5,每個數的範圍為:(0,10)
mat A = randu<mat>(5, 5)*10;
A.print("原矩陣A = \n");
//2、輸出矩陣A的第2行第3列元素
cout<<"A的第(2,3)個元素為:"<<A(1 ,2)<<endl;
}
C、結果
說明:矩陣的下標與二維陣列的下標一致。
2、矩陣的轉置
A、通過呼叫函式“.t()”來進行矩陣的轉置。
B、示例
#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
//1、產生隨機矩陣A,大小為5x5,每個數的範圍為:(0,10)
mat A = randu<mat>(5, 5)*10;
A.print("原矩陣A = \n");
//2、矩陣A的轉置
mat B = A.t();
B.print("A的轉置B = \n" );
}
C、結果
3、獲取矩陣的行數、列數及其矩陣的元素個數
A、通過呼叫函式“.n_rows”、“.n_cols”和“n_elem”獲取矩陣的行數、列數和元素個數。
B、示例
#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
//1、產生隨機矩陣A,大小為5x5,每個數的範圍為:(0,10)
mat A = randu<mat>(5, 5)*10;
A.print("原矩陣A = \n");
//2、獲取矩陣A的行數
int A_rows = A.n_rows;
cout<<"矩陣A的行數為:"<<A_rows<<endl;
//3、獲取矩陣A的列數
int A_cols = A.n_cols;
cout<<"矩陣A的列數為:"<<A_cols<<endl;
//4、獲取矩陣A的元素個數
int A_n_elem = A.n_elem;
cout<<"矩陣A的元素個數為"<<A_n_elem<<endl;
}
C、結果
4、獲取矩陣的某一行與某幾行
A、通過呼叫函式“.row(i)”和“.rows(i,j)”獲取矩陣的某一行與某幾行。
B、示例
#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
//1、產生隨機矩陣A,大小為5x5,每個數的範圍為:(0,10)
mat A = randu<mat>(5, 5)*10;
A.print("原矩陣A = \n");
//2、獲取矩陣A的第2行
rowvec A_row = A.row(1);
A_row.print("矩陣A的第2行為:\n");
//3、獲取矩陣A的第2到第4行
mat A_rows = A.rows(1,3);
A_rows.print(""矩陣A的第2行到底4行為:\n"");
}
C、結果
5、獲取矩陣的某一列與某幾列
獲取矩陣某一列與某幾列的方法與獲取矩陣某一行與某幾行的方法基本相同,只需呼叫函式“.col(i)”和“.cols(i,j)”即可。因此,這裡不再贅述。
6、獲取原矩陣的子矩陣
A、通過呼叫函式“.submat(span(p,q),span(r,s))”來獲取原矩陣第p到第q行與第r到第s列所交叉的部分——子矩陣。
B、示例
#include <iostream>
#include <armadillo>
using namespace arma;
int main()
{
//1、產生隨機矩陣A,大小為5x5,每個數的範圍為:(0,10)
mat A = randu<mat>(5, 5)*10;
A.print("原矩陣A = \n");
//2、獲取A的第2:4行和2:4列子矩陣
mat A_pq_rs = A.submat(span(1,3),span(1,3));
A_pq_rs.print("矩陣A的第2:4行和2:4列子矩陣");
}
C、結果