Eigen矩陣操作類 (Map, Block, 視圖類)

1.?Map?類:內存映射(零拷貝操作)

核心功能

將現有的 C/C++ 數組或緩沖區映射為 Eigen 矩陣/向量,不復制數據,直接操作原內存。

模板參數

cpp

Map<Matrix<Scalar, Rows, Cols, Options, MaxRows, MaxCols>>
  • 參數與?Matrix?一致,通常簡化為?Map<MatrixXd>(動態大小)或?Map<Vector3f>(固定大小)。

構造函數與方法
方法/構造函數參數說明功能示例
Map(Scalar* data)data: 原始數組指針映射為一維向量float arr[3]; Map<Vector3f> v(arr);
Map(Scalar* data, Index rows, Index cols)data: 數組指針,rows/cols: 矩陣尺寸映射為矩陣double buf[4]; Map<Matrix2d> m(buf, 2, 2);
data()返回原始指針float* ptr = v.data();
注意事項
  • 內存對齊:若原始數據未對齊(如動態分配的數組),需使用?Eigen::Unaligned?標志:

    cpp

    Map<Matrix3f, Unaligned> m(ptr);

2.?Block?類:子矩陣操作

核心功能

提取矩陣的某一塊區域(子矩陣),返回一個視圖(不復制數據)。

主要方法
方法參數說明返回值/功能示例
block(Index startRow, Index startCol, Index blockRows, Index blockCols)startRow/startCol: 起始位置,blockRows/blockCols: 子塊大小動態大小子塊MatrixXd B = A.block(1, 1, 2, 2);
block<BlockRows, BlockCols>(startRow, startCol)模板參數:子塊固定大小,startRow/startCol: 起始位置固定大小子塊(編譯時優化)auto C = A.block<2,2>(0, 0);
topLeftCorner(rows, cols)提取左上角子塊同?blockMatrix3f D = A.topLeftCorner(3, 3);
middleRows(startRow, numRows)提取中間連續多行行子矩陣VectorXd seg = v.middleRows(2, 3);
變體方法
  • 列/行操作
    col(j).segment(start, length)(列向量的子段)、row(i).head(n)(行的前 n 元素)。

3. 視圖類(Transpose,?Diagonal?等)

核心功能

通過視圖(View)操作原矩陣的特定結構(如轉置、對角元素),不復制數據

常用視圖類
類/方法參數說明功能示例
transpose()返回轉置視圖MatrixXd AT = A.transpose();(注意:賦值會觸發復制)
adjoint()返回共軛轉置視圖MatrixXcf AH = A.adjoint();
diagonal()可指定偏移量(默認 0)返回對角線的向量視圖VectorXd diag = A.diagonal();
diagonal<Offset>()Offset: 對角線的偏移(正數=上對角線,負數=下對角線)返回指定對角線的視圖VectorXd sup_diag = A.diagonal<1>();
triangularView<Mode>()Mode:?Upper,?Lower,?StrictlyUpper?等返回三角矩陣視圖auto L = A.triangularView<Lower>();
視圖的賦值與計算
  • 視圖可直接參與運算,但若需保存結果,需賦值給具體矩陣:

    cpp

    MatrixXd B = A.transpose() * A;  // 合法:觸發實際計算
    auto C = A.transpose();          // C 仍是視圖,依賴 A 的生命周期!

4. 代碼示例

cpp

#include <Eigen/Dense>
using namespace Eigen;// Map 示例
float data[] = {1, 2, 3, 4};
Map<Matrix<float, 2, 2, RowMajor>> mat_map(data);  // 按行映射
mat_map(1, 1) = 5;  // 修改原數組 data[3] = 5// Block 示例
MatrixXd A(4, 4);
A.setRandom();
MatrixXd B = A.block(1, 1, 2, 2);  // 提取 2x2 子矩陣
A.topLeftCorner(2, 2).setZero();   // 將左上角置零// 視圖示例
Vector3d v(1, 2, 3);
MatrixXd M = v * v.transpose();     // 外積(v.transpose() 是視圖)
double d = v.dot(v);                // 點積

5. 關鍵注意事項

  1. 生命周期管理:視圖類(如?BlockTranspose)依賴原矩陣的數據,原矩陣銷毀后視圖無效。

  2. 性能優化:固定尺寸的?Block(如?block<2,2>())比動態尺寸更快。

  3. 別名問題:操作視圖時避免與原矩陣混用,可能導致錯誤:

    cpp

    A = A.transpose();  // 錯誤!需使用 A.transposeInPlace();

完整方法速查表

操作類型類/方法典型用途
內存映射Map<MatrixXd>包裝現有數組為 Eigen 矩陣
子塊提取block(),?segment()操作局部數據
結構視圖diagonal(),?transpose()快速訪問對角線、轉置等結構

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80604.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80604.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80604.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多系統安裝經驗,移動硬盤,ubuntu grub修改/etc/fstab 移動硬盤需要改成nfts格式才能放steam游戲

總結&#xff1a;我硬盤會自動掛載&#xff0c;直接格式化nfts&#xff0c;steam就能裝里面了 機械硬盤裝系統真的不行&#xff0c;超級慢游戲還跑不了 --------------------------------------------------------------------底下都不用看 筆記本一個系統&#xff0c;移動硬盤…

JFLAP SOFTWARE 編譯原理用(自動機繪圖)

csdn全是蛆蟲&#xff0c;2mb的軟件&#xff0c;都在那里搞收費&#xff0c;我就看不慣&#xff0c;我就放出來&#xff0c;那咋了&#xff01;&#xff01;&#xff01; https://pan.baidu.com/s/1IuEfHScynjCCUF5ScF26KA 通過網盤分享的文件&#xff1a;JFLAP7.1.jar 鏈接: h…

[Windows] Disk Sorter文件分類管理軟件 v16.7.18

[Windows] Disk Sorter文件分類管理 鏈接&#xff1a;https://pan.xunlei.com/s/VOOl0sDntAdHvlMkc7N0ZOD-A1?pwd966n# Disk Sorter是一個功能強大的文件分類管理軟件&#xff0c;允許對本地磁盤、網絡共享、NAS設備和企業存儲系統中的文件進行分類&#xff0c;并且支持生成…

STM32提高篇: 藍牙通訊

STM32提高篇: 藍牙通訊 一.藍牙通訊介紹1.藍牙技術類型 二.藍牙協議棧1.藍牙芯片架構2.BLE低功耗藍牙協議棧框架 三.ESP32-C3中的藍牙功能1.廣播2.掃描3.通訊 四.發送和接收 一.藍牙通訊介紹 藍牙&#xff0c;是一種利用低功率無線電&#xff0c;支持設備短距離通信的無線電技…

6.1.多級緩存架構

目錄 一、多級緩存基礎與核心概念 緩存的定義與價值 ? 緩存的應用場景&#xff08;高并發、低延遲、減輕數據庫壓力&#xff09; ? 多級緩存 vs 單級緩存的優劣對比 多級緩存核心組件 ? 本地緩存&#xff08;Caffeine、Guava Cache&#xff09; ? 分布式緩存&#xff08;…

MySQL的MVCC【學習筆記】

MVCC 事務的隔離級別分為四種&#xff0c;其中Read Committed和Repeatable Read隔離級別&#xff0c;部分實現就是通過MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并發控制&#xff09; 版本鏈 版本鏈是通過undo日志實現的&#xff0c; 事務每次修改…

基于OpenMV+STM32+OLED與YOLOv11+PaddleOCR的嵌入式車牌識別系統開發筆記

基于OpenMV、STM32與OLED的嵌入式車牌識別系統開發筆記 基于OpenMV、STM32與OLED的嵌入式車牌識別系統開發筆記系統架構全景 一、實物演示二、OpenMV端設計要點1. 硬件配置優化2. 智能幀率控制算法3. 數據傳輸協議設計 三、PyTorch后端核心實現&#xff1a;YOLOv11與PaddleOCR的…

C#中常見的設計模式

文章目錄 引言設計模式的分類創建型模式 (Creational Patterns)1. 單例模式 (Singleton)2. 工廠方法模式 (Factory Method)3. 抽象工廠模式 (Abstract Factory)4. 建造者模式 (Builder) 結構型模式 (Structural Patterns)5. 適配器模式 (Adapter)6. 裝飾器模式 (Decorator)7. 外…

Nacos簡介—3.Nacos的配置簡介

大綱 1.Nacos生產集群Web端口與數據庫配置 2.Nacos生產集群的Distro協議核心參數 3.Nacos打通CMDB實現跨機房的就近訪問 4.Nacos基于SPI動態擴展機制來獲取CMDB的數據 5.基于Nacos SPI機制開發CMDB動態擴展 6.Nacos基于CMDB來實現多機房就近訪問 7.Nacos生產集群Prometh…

Jest 快照測試

以下是關于 Jest 快照測試的系統化知識總結,從基礎使用到底層原理全面覆蓋: 一、快照測試核心原理 1. 工作機制三階段 #mermaid-svg-GC46t2NBvGv7RF0M {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GC46t2NBvGv…

第十六屆藍橋杯大賽軟件賽省賽 C/C++ 大學B組 [京津冀]

由于官方沒有公布題目的數據, 所以代碼僅供參考 1. 密密擺放 題目鏈接&#xff1a;P12337 [藍橋杯 2025 省 AB/Python B 第二場] 密密擺放 - 洛谷 題目描述 小藍有一個大箱子&#xff0c;內部的長寬高分別是 200、250、240&#xff08;單位&#xff1a;毫米&#xff09;&…

Spring 學習筆記之 @Transactional 異常不回滾匯總

使用springboot時&#xff0c;只要引入spring-jdbc/jpa相關的依賴后&#xff0c;在想要啟用事務的方法上加上Transactional注解就能開啟事務&#xff0c;碰到異常就能自動回滾。大大的提高了編碼的便捷性性&#xff0c;同時也不侵入代碼&#xff0c;保持了代碼的簡潔性。 默認情…

React 與 Vue 虛擬 DOM 實現原理深度對比:從理論到實踐

在現代前端開發中&#xff0c;React 和 Vue 作為最流行的兩大框架&#xff0c;都采用了虛擬 DOM&#xff08;Virtual DOM&#xff09; 技術來優化渲染性能。虛擬 DOM 的核心思想是通過 JavaScript 對象模擬真實 DOM&#xff0c;減少直接操作 DOM 的開銷&#xff0c;從而提高頁面…

WordPress AI 原創文章自動生成插件 24小時全自動生成SEO原創文章 | 多語言支持 | 智能配圖與排版

為什么選擇Linkreate AI內容生成插件&#xff1f; ? 全自動化工作流程 - 從關鍵詞挖掘到文章發布一站式完成 ? 多語言支持 - 輕松覆蓋全球市場&#xff08;中/英等多語種&#xff09; ? 智能SEO優化 - 自動生成搜索引擎友好的內容結構 ? AI智能配圖 - 每篇文章自動匹配高質…

GPU加速-系統CUDA12.5-Windows10

誤區注意 查看當前系統可支持的最高版本cuda&#xff1a;nvidia-smi 說明&#xff1a; 此處顯示的12.7只是驅動對應的最高版本&#xff0c;不一定是 / 也不一定需要是 當前Python使用的版本。但我們所安裝的CUDA版本需要 小于等于它&#xff08;即≤12.7&#xff09;因此即使…

IOT項目——DIY 氣象站

開源項目&#xff1a;ESP32 氣象站 作者&#xff1a;GiovanniAggiustatutto 原文鏈接&#xff1a;原文 開源項目&#xff1a;太陽能 WiFi 氣象站 V4.0 作者&#xff1a;opengreenenergy 原文鏈接&#xff1a;原文 DIY 氣象站 簡介1-制版2-物料 溫度設備塔風向標風速計雨量計框…

5G助力智慧城市的崛起——從概念到落地的技術實踐

5G助力智慧城市的崛起——從概念到落地的技術實踐 引言&#xff1a;智慧城市中的“隱形脈絡” 隨著城市化的快速推進&#xff0c;傳統的城市管理方式已經難以滿足人口增長和資源優化的需求。智慧城市的概念應運而生&#xff0c;通過技術創新實現智能化、可持續發展的城市生態…

【Linux】web服務器的部署和優化

目錄 nginx的安裝與啟用--/usr/share/nginx/html默認發布目錄 nginx的主配置文件--/etc/nginx/nginx_conf nginx的端口 nginx默認發布文件--index.html nginx默認發布目錄 nginx的訪問控制 基于IP地址的訪問控制 基于用戶認證的訪問控制 nginx的虛擬主機--/etc/nginx/…

結合五層網絡結構講一下用戶在瀏覽器輸入一個網址并按下回車后到底發生了什么?

文章目錄 實際應用第一步&#xff1a;用戶在瀏覽器輸入 www.baidu.com 并按下回車1. 瀏覽器觸發域名解析&#xff08;DNS查詢&#xff09; 第二步&#xff1a;DNS請求的逐層封裝與傳輸1. 應用層&#xff08;DNS協議&#xff09;2. 傳輸層&#xff08;UDP協議&#xff09;3. 網絡…

深入理解N皇后問題:從DFS到對角線優化

N皇后問題是一個經典的算法問題&#xff0c;要求在NN的棋盤上放置N個皇后&#xff0c;使得它們互不攻擊。本文將全面解析該問題的解法&#xff0c;特別聚焦于DFS算法和對角線優化的數學原理。 問題描述 在NN的國際象棋棋盤上放置N個皇后&#xff0c;要求&#xff1a; 任意兩個…