Armadillo C :如何使用来自另一个矩阵的多个元素(特别是在立方体结构中)修改矩阵的多个数组元素

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

本文关键字:立方体 特别是 结构 数组元素 修改 元素 何使用 另一个 Armadillo      更新时间:2023-10-16

在matlab中,如果我有两个3x3矩阵A和b,并且要将B的最后两列复制到A的前两个列中,则使用以下语法:

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

我正在尝试使用C 中的Armadillo完成相同的动作,特别是用于立方体结构。在Armadillo中,如果我有两个Cubes A和B带9个切片(每个切片为3x3矩阵),我假设我会使用以下来执行相同的列元元素更新:

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

其中'i'只是切片索引。该语法基于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;
}