簡體   English   中英

Armadillo C ++:如何使用來自另一個矩陣的多個元素修改矩陣的多個數組元素,特別是在立方體結構中?

[英]Armadillo C++: How to modify multiple array elements of a matrix using multiple elements from another matrix, specifically in a cube structure?

在MATLAB中,如果我有兩個3x3矩陣A和B並且想要將B的最后兩列復制到A的前兩個中,我將使用以下語法:

A(:,1:2) = B(:,2:3)

我試圖在C ++中使用Armadillo完成相同的操作,特別是對於立方體結構。 在犰狳中,如果我有兩個立方體A和B有九個切片(每個切片是一個3x3矩陣),我假設我將使用以下內容執行相同的列元素更新:

A(span(0,2),span(0,1),span(i)) = B(span(0,2),span(1,2),span(i))

其中'i'只是切片索引。 語法基於Armadillo語法指南。

代碼編譯沒有錯誤並運行; 多維數據集切片只是沒有更新。 我在這里使用正確的Armadillo語法,這是執行這些操作的最有效方法嗎?

如果你想要一個簡單的復制/粘貼(不是你的立方體矩陣的移位/旋轉),你可以使用這種方法來解決這個問題:

#include <armadillo>

int main (int argc, char* argv[])
{
    size_t num_slices = 9;

    arma::icube A (3, 3, num_slices);
    arma::icube B (3, 3, num_slices);

    A.zeros();
    B.randn();

    A.print("Cube A :\n");
    B.print("Cube B :\n");

    for (int s = 0; s < num_slices; ++s)
        A.slice(s)(arma::span::all, arma::span(0, 1)) = 
        B.slice(s)(arma::span::all, arma::span(1, 2));

    A.print("Cube A :\n");
    B.print("Cube B :\n");

    return 0;
}

暫無
暫無

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

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