国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Eigen庫的基本使用說明(二)

這篇具有很好參考價(jià)值的文章主要介紹了Eigen庫的基本使用說明(二)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?之前的文章中,簡單的介紹了一些基本的操作,回歸之前的內(nèi)容可以參考一下鏈接:

zEigen庫的基本使用說明_每日億學(xué)的博客-CSDN博客_eigen庫

?本章內(nèi)容主要就是繼續(xù)延伸Eigen庫的使用內(nèi)容也會(huì)實(shí)時(shí)進(jìn)行更新,Eigen庫在SLAM中使用廣泛,需要對(duì)這個(gè)庫有一定的熟悉。

一、賦值操作

首先最簡單的如何給申請(qǐng)好的矩陣對(duì)象進(jìn)行賦值?

1、定義對(duì)象時(shí)

//這里以動(dòng)態(tài)的矩陣模板為例子
MatrixXi a {      // 創(chuàng)建 2x2 matrix
      {1, 2},     // first row
      {3, 4}      // second row
};

Matrix<int, 1, 5> c = {1, 2, 3, 4, 5};

2、<<操作

類似輸入流的方式

Matrix3f m;
m << 1, 2, 3,
     4, 5, 6,
     7, 8, 9;

3、(,)賦值

注意這里和數(shù)組不一樣它使用的是[]索引

Eigen::MatrixXd m(2,2);
  m(0,0) = 3;
  m(1,0) = 2.5;
  m(0,1) = -1;
  m(1,1) = m(1,0) + m(0,1);

這里主要使用的多維2和3這兩種。

二、矩陣和向量運(yùn)算

???????Eigen通過重載常見的 C++ 算術(shù)運(yùn)算符(如 +、-、*)或通過特殊方法(如 dot()、cross() 等)提供矩陣/向量算術(shù)運(yùn)算。對(duì)于???????Matrix類(矩陣和向量),運(yùn)算符僅重載以支持線性代數(shù)運(yùn)算。例如,matrix1?*?matrix2意味著矩陣矩陣乘積,并且vector?+?scalar(一個(gè)數(shù))是不允許的。

1、加減

要進(jìn)行加減操作,首先矩陣類型相同,矩陣大小也得相同才能進(jìn)行操作

  • 二元運(yùn)算符 + 如a+b
  • 二元運(yùn)算符 - 如a-b
  • 一元運(yùn)算符 - 如-a
  • 復(fù)合運(yùn)算符 += 如a+=b
  • 復(fù)合運(yùn)算符 -= 如a-=b
#include <iostream>
#include <Eigen/Dense>
 
int main()
{
  Eigen::Matrix2d a;
  a << 1, 2,
       3, 4;
  Eigen::MatrixXd b(2,2);
  b << 2, 3,
       1, 4;
  std::cout << "a + b =\n" << a + b << std::endl;
  std::cout << "a - b =\n" << a - b << std::endl;
  std::cout << "Doing a += b;" << std::endl;
  a += b;
  std::cout << "Now a =\n" << a << std::endl;
  Eigen::Vector3d v(1,2,3);
  Eigen::Vector3d w(1,0,0);
  std::cout << "-v + w - v =\n" << -v + w - v << std::endl;
}

?輸出:

a + b =
3 5
4 8
a - b =
-1 -1
 2  0
Doing a += b;
Now a =
3 5
4 8
-v + w - v =
-1
-4
-6

2、標(biāo)量的乘法和除法

  • 二元運(yùn)算符 * 如matrix*scalar
  • 二元運(yùn)算符 * 如scalar*matrix
  • 二元運(yùn)算符 / 如matrix/scalar
  • 復(fù)合運(yùn)算符 *= 如matrix*=scalar
  • 復(fù)合運(yùn)算符 /= 如matrix/=scalar
#include <iostream>
#include <Eigen/Dense>
 
int main()
{
  Eigen::Matrix2d a;
  a << 1, 2,
       3, 4;
  Eigen::Vector3d v(1,2,3);
  std::cout << "a * 2.5 =\n" << a * 2.5 << std::endl;
  std::cout << "0.1 * v =\n" << 0.1 * v << std::endl;
  std::cout << "Doing v *= 2;" << std::endl;
  v *= 2;
  std::cout << "Now v =\n" << v << std::endl;
}

?輸出:

a * 2.5 =
2.5   5
7.5  10
0.1 * v =
0.1
0.2
0.3
Doing v *= 2;
Now v =
2
4
6

?3、轉(zhuǎn)置和共軛

? ? ? ? 矩陣a的轉(zhuǎn)置、共軛和伴隨(即共軛的轉(zhuǎn)置),分別成員函數(shù)為:transpose(),conjugate()和adjoint()。對(duì)于實(shí)數(shù)矩陣共軛共軛操作實(shí)際是空操作伴隨的其實(shí)就是轉(zhuǎn)置。

MatrixXcf a = MatrixXcf::Random(2,2);
cout << "Here is the matrix a\n" << a << endl;
 
cout << "Here is the matrix a^T\n" << a.transpose() << endl;
 
 
cout << "Here is the conjugate of a\n" << a.conjugate() << endl;
 
 
cout << "Here is the matrix a^*\n" << a.adjoint() << endl;

//輸出
ere is the matrix a
 (-0.211,0.68) (-0.605,0.823)
 (0.597,0.566)  (0.536,-0.33)
Here is the matrix a^T
 (-0.211,0.68)  (0.597,0.566)
(-0.605,0.823)  (0.536,-0.33)
Here is the conjugate of a
 (-0.211,-0.68) (-0.605,-0.823)
 (0.597,-0.566)    (0.536,0.33)
Here is the matrix a^*
 (-0.211,-0.68)  (0.597,-0.566)
(-0.605,-0.823)    (0.536,0.33)

這個(gè)官方提升禁止使用a=a.transpose()會(huì)出現(xiàn)一個(gè)別名問題!問題描述如下:

Matrix2i a; a << 1, 2, 3, 4;
cout << "Here is the matrix a:\n" << a << endl;
 
a = a.transpose(); // !!! do NOT do this !!!
cout << "and the result of the aliasing effect:\n" << a << endl;
//輸出
Here is the matrix a:
1 2
3 4
and the result of the aliasing effect:
1 2
2 4

在實(shí)際的編寫代碼時(shí)不小心就會(huì)這樣編寫,Eigen給出了一個(gè)原地轉(zhuǎn)置的函數(shù):transposePlace()

?這樣我們就不需要為了轉(zhuǎn)置再賦值給原變量了。

MatrixXf a(2,3); a << 1, 2, 3, 4, 5, 6;
cout << "Here is the initial matrix a:\n" << a << endl;
 
 
a.transposeInPlace();
cout << "and after being transposed:\n" << a << endl;


//輸出
Here is the initial matrix a:
1 2 3
4 5 6
and after being transposed:
1 4
2 5
3 6

4、矩陣-矩陣和矩陣*向量乘法

矩陣和矩陣之間可以使用*符號(hào)完成,向量其實(shí)也是矩陣屬性所以也是相對(duì)于矩陣隱式處理。一般有以下兩個(gè)情況:

  • 二元運(yùn)算符 * 如a*b
  • 復(fù)合運(yùn)算符 *= 如a*=b(這在右邊相乘:a*=b等同于a = a*b

?

#include <iostream>
#include <Eigen/Dense>
 
int main()
{
  Eigen::Matrix2d mat;
  mat << 1, 2,
         3, 4;
  Eigen::Vector2d u(-1,1), v(2,0);
  std::cout << "Here is mat*mat:\n" << mat*mat << std::endl;
  std::cout << "Here is mat*u:\n" << mat*u << std::endl;
  std::cout << "Here is u^T*mat:\n" << u.transpose()*mat << std::endl;
  std::cout << "Here is u^T*v:\n" << u.transpose()*v << std::endl;
  std::cout << "Here is u*v^T:\n" << u*v.transpose() << std::endl;
  std::cout << "Let's multiply mat by itself" << std::endl;
  mat = mat*mat;
  std::cout << "Now mat is mat:\n" << mat << std::endl;

//輸出
Here is mat*mat:
 7 10
15 22
Here is mat*u:
1
1
Here is u^T*mat:
2 2
Here is u^T*v:
-2
Here is u*v^T:
-2 -0
 2  0
Let's multiply mat by itself
Now mat is mat:
 7 10
15 22

注意官網(wǎng)提示我們使用m=m*m運(yùn)算,不會(huì)出現(xiàn)別名問題Eigen幫我們修改成:

tmp=m*m;

m=tmp;

5、點(diǎn)積和叉積

對(duì)于點(diǎn)積和叉積,您需要dot()和cross()方法。當(dāng)然,點(diǎn)積也可以像u.adjoint()*v一樣得到一個(gè)1x1的矩陣。

#include <iostream>
#include <Eigen/Dense>
 
int main()
{
  Eigen::Vector3d v(1,2,3);
  Eigen::Vector3d w(0,1,2);
 
  std::cout << "Dot product: " << v.dot(w) << std::endl;
  double dp = v.adjoint()*w; // automatic conversion of the inner product to a scalar
  std::cout << "Dot product via a matrix product: " << dp << std::endl;
  std::cout << "Cross product:\n" << v.cross(w) << std::endl;
}

//輸出
Dot product: 8
Dot product via a matrix product: 8
Cross product:
 1
-2
 1

?官網(wǎng)提示叉積只能試用大小為3的向量。

6、基本算術(shù)歸納運(yùn)算

Eigen還提供了求總和(sum())、求總積(prod()),最大值(maxCoeff())和最小值(minCoeff())

#include <iostream>
#include <Eigen/Dense>
 
using namespace std;
int main()
{
  Eigen::Matrix2d mat;
  mat << 1, 2,
         3, 4;
  cout << "Here is mat.sum():       " << mat.sum()       << endl;
  cout << "Here is mat.prod():      " << mat.prod()      << endl;
  cout << "Here is mat.mean():      " << mat.mean()      << endl;
  cout << "Here is mat.minCoeff():  " << mat.minCoeff()  << endl;
  cout << "Here is mat.maxCoeff():  " << mat.maxCoeff()  << endl;
  cout << "Here is mat.trace():     " << mat.trace()     << endl;
}
//輸出
Here is mat.sum():       10
Here is mat.prod():      24
Here is mat.mean():      2.5
Here is mat.minCoeff():  1
Here is mat.maxCoeff():  4
Here is mat.trace():     5

我們求取最大值和最小值還可以求取它的坐標(biāo):文章來源地址http://www.zghlxwxcb.cn/news/detail-421439.html

std::ptrdiff_t i, j;
float minOfM = m.minCoeff(&i,&j);

RowVector4i v = RowVector4i::Random();
int maxOfV = v.maxCoeff(&i);

到了這里,關(guān)于Eigen庫的基本使用說明(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • URI、URL、URIBuilder、UriBuilder、UriComponentsBuilder說明及基本使用

    之前想過直接獲取url通過拼接字符串的方式實(shí)現(xiàn),但是這種只是暫時(shí)的,后續(xù)地址如果有變化或參數(shù)很多,去豈不是要拼接很長,由于這些等等原因,所以找了一些方法實(shí)現(xiàn) URI全稱是Uniform Resource Identifier,也就是統(tǒng)一資源標(biāo)識(shí)符,它是一種采用特定的語法標(biāo)識(shí)一個(gè)資源的字符

    2024年02月11日
    瀏覽(16)
  • eDiary-白日夢(mèng)電子記事本基本使用說明【記事本導(dǎo)出和導(dǎo)入方法、本地?cái)?shù)據(jù)遷移方法、記錄工作日?qǐng)?bào)、日歷代辦等】

    eDiary-白日夢(mèng)電子記事本基本使用說明【記事本導(dǎo)出和導(dǎo)入方法、本地?cái)?shù)據(jù)遷移方法、記錄工作日?qǐng)?bào)、日歷代辦等】

    因?yàn)楣敬罄蟹窒碣Y料,需要用到白日夢(mèng)這個(gè)電子記事本,所以才了解到這個(gè)軟件,體量小,功能高級(jí),是個(gè)好軟件。 官方地址:白日夢(mèng) 導(dǎo)出與導(dǎo)入均不要使用文件-導(dǎo)出和導(dǎo)入,不好使。 右鍵需要導(dǎo)出的文檔-高級(jí)-導(dǎo)出-文件 跟著提示下一步就行了 我這以導(dǎo)入文件夾資料為

    2024年02月03日
    瀏覽(81)
  • Python中Thop庫的基本介紹和參數(shù)說明

    關(guān)注B站可以觀看更多實(shí)戰(zhàn)教學(xué)視頻:肆十二-的個(gè)人空間-肆十二-個(gè)人主頁-嗶哩嗶哩視頻 (bilibili.com) Hi,兄弟們,這里是肆十二,今天我們來討論一下我們經(jīng)常使用的Thop模塊的常用模塊和用途。 Thop介紹 THOP(Torch-OpCounter)是一個(gè)用于計(jì)算PyTorch模型操作數(shù)和計(jì)算量的工具。通

    2024年04月13日
    瀏覽(25)
  • 【VxWorks】VxWorks系統(tǒng)詳細(xì)介紹說明,環(huán)境搭建說明,使用場(chǎng)景,使用實(shí)例

    目錄 1.VxWorks 概述 2.詳細(xì)介紹 2.環(huán)境搭建說明 3.使用場(chǎng)景 4.使用實(shí)例 ????????VxWorks 是一款實(shí)時(shí)操作系統(tǒng)(RTOS),廣

    2024年02月15日
    瀏覽(18)
  • iotop命令使用說明及iotop輸出排序操作說明

    iotop命令使用說明及iotop輸出排序操作說明

    iotop是一個(gè)用來顯示實(shí)時(shí)的磁盤活動(dòng)?的工具,可查看哪些程序、進(jìn)程或線程占用io過多。 iotop監(jiān)控 Linux 內(nèi)核輸出的 I/O 使用信息,并且顯示一個(gè)系統(tǒng)中進(jìn)程或線程的當(dāng)前 I/O 使用情況。它顯示每個(gè)進(jìn)程/線程讀寫 I/O 帶寬。它同樣顯示當(dāng)?shù)却龘Q入和等待 I/O 的線程/進(jìn)程花費(fèi)的時(shí)

    2024年04月12日
    瀏覽(24)
  • chatGPT使用說明,相關(guān)技巧,使用記錄等等

    它的工作原理是基于自然語言處理技術(shù)和深度學(xué)習(xí)算法。當(dāng)用戶輸入問題時(shí),我會(huì)將問題分解成并進(jìn)行語義分析,以 理解用戶的意圖 。接著,我會(huì)調(diào)用內(nèi)部的知識(shí)庫和外部資源,比如搜索引擎、數(shù)據(jù)庫等,尋找與問題相關(guān)的答案,并通過 回答、提供鏈接、建議 等方式

    2024年02月03日
    瀏覽(22)
  • 超維空間M1無人機(jī)使用說明書——01、ROS機(jī)載電腦使用說明——遠(yuǎn)程連接

    超維空間M1無人機(jī)使用說明書——01、ROS機(jī)載電腦使用說明——遠(yuǎn)程連接

    1、SSH優(yōu)缺點(diǎn) 優(yōu)點(diǎn):1、消耗網(wǎng)絡(luò)資源 2、運(yùn)行穩(wěn)定 缺點(diǎn):1、圖形化界面卡頓 2、對(duì)新手不友好 2、可視化軟件優(yōu)缺點(diǎn) 優(yōu)點(diǎn):1、對(duì)新手友好 2、運(yùn)圖形化界面比ssh流暢 缺點(diǎn):1、消耗網(wǎng)絡(luò)資源 一、遠(yuǎn)程登錄到無人機(jī)端的Jetson nano 步驟一、通過SSH 登錄到ROS主控端 無人機(jī)上電后會(huì)默認(rèn)發(fā)

    2024年01月22日
    瀏覽(23)
  • git使用說明

    git使用說明

    以前一直用subversion,使用圖形界面,用了好幾年,后來公司要求轉(zhuǎn)git,別人一月就轉(zhuǎn)變過來了,我一年后才轉(zhuǎn)換過來,尋找各種教程,嘗試各種工具.最終發(fā)現(xiàn)引領(lǐng)我入門的是官網(wǎng)的Pro git,而最終選擇的工具是直接使用命令行. 這是我常用的命令行使用手冊(cè),當(dāng)時(shí)迷茫的是命令行太多,哪些

    2024年02月09日
    瀏覽(25)
  • Acunetix使用說明

    Acunetix使用說明

    簡述 Acunetix是一種應(yīng)用安全性掃描工具,旨在幫助發(fā)現(xiàn)和修復(fù)Web應(yīng)用程序中的漏洞和安全風(fēng)險(xiǎn)。 Acunetix可以發(fā)現(xiàn)以下一些常見的安全問題: 跨站腳本攻擊(XSS):通過在網(wǎng)頁中注入惡意腳本來執(zhí)行未經(jīng)授權(quán)的操作。 ? SQL注入攻擊:利用應(yīng)用程序?qū)τ脩糨斎氲牟徽_處理,從

    2024年02月15日
    瀏覽(15)
  • 曙光云使用說明

    曙光云使用說明

    https://ac.sugon.com/ac/home/index.html 控制臺(tái)界面 創(chuàng)建個(gè)人工作目錄及上傳文件。點(diǎn)擊概覽頁面頂端的 E-Shell 菜單欄,進(jìn)入所連主機(jī)的 Shell 終端。在用戶目錄下新建個(gè)人工作目錄,如:mkdir ywj2 參考鏈接:https://ac.sugon.com/doc/1.0.6/11250/general-handbook/software-tutorial/DeepLearning-1.html#1-minico

    2024年01月18日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包