c++ - Armadillo C++ : How to modify multiple array elements of a matrix using multiple elements from another matrix, 专门在立方体结构中?

标签 c++ arrays matlab matrix armadillo

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

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

我正在尝试使用 C++ 中的 Armadillo 完成相同的操作,特别是针对立方体结构。在 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;
}

关于c++ - Armadillo C++ : How to modify multiple array elements of a matrix using multiple elements from another matrix, 专门在立方体结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42531627/

相关文章:

database - Matlab数据库准备语句和绑定(bind)变量

c++ - 如何在 C++20 中安全地将 const char* 转换为 const char8_t*?

java - 如何对数学运算字符串进行代数展开

matlab - 给定子图的句柄,如何获取其所有关联的颜色条句柄?

php - 使用 PDO 将数组数据插入数据库

c - 为什么未定义大小的数组只允许在 main() 中使用?

c++ - Matlab/Mex : Conversion warning in mxarray. h

c++ - 如何测量 sqlite3 查询所用的时间?

c++ - 如何在发送 EM_SETCUEBANNER 消息时更改文本提示的颜色?

c++ - 如何单独处理子ListBox WndProc?