Armadillo/C++:如何将元素从向量分配到立方体管?

Posted

技术标签:

【中文标题】Armadillo/C++:如何将元素从向量分配到立方体管?【英文标题】:Armadillo/C++: How to assign elements from a vector to a cube tube? 【发布时间】:2020-01-03 07:52:25 【问题描述】:

假设我有一个 3x3x4 立方体 Q(即一个具有 3 行、3 列和 4 个切片的立方体)和一个具有 4 个元素(即与 Q 切片一样多的元素)的列向量 C。有没有办法让我使用 C 来填充一管 Q?

我尝试了以下方法:

# include <armadillo>

cube Q(3,3,4);
mat C(4,1, fill::zeros);
Q.tube(0, 0) = C;

但它不起作用(出现运行时异常)。有没有办法在不显式循环管道和矢量元素的情况下实现目标?

已解决 上面的代码工作得很好。事实证明,我第一次尝试时可能做错了其他事情(不知道是什么)。感谢 darcamo 指出代码确实有效!

【问题讨论】:

Q的类型是什么? 它是一个立方体,如上所述。我相信默认元素类型是双精度。 cube 不是标准的 c++ 类型。请告诉我们它来自哪里。 我的问题是关于 c++ 的犰狳库,正如您可以在帖子的标题和我使用的关键字中看到的那样。 Cube 是 Armadillo 中定义的一个类,它基本上是一个三维矩阵。在我的问题中,我假设熟悉 Armadillo 库。 【参考方案1】:

这很奇怪。我试了一下,对我来说效果很好。在赋值之前尝试将C 矩阵转换为arma::vec

Q.tube(0, 0) = arma::conv_to<arma::vec>::from(C);

由于“管”是一维的,因此给它分配一个完整的二维矩阵是没有意义的。虽然在你的情况下它是一个列矩阵,它应该可以工作。

我不需要转换它,但值得一试,因为犰狳中的某些功能可能由于不同的标志、编译器支持等原因而无法使用。

【讨论】:

感谢您的回复。你是对的:我的代码按原样工作!当我第一次尝试它并得到运行时错误时,我不知道我在做什么,但现在它工作得很好。我没有在标志或预处理器语句方面进行任何更改,所以我怀疑我在没有意识到的情况下做错了什么。

以上是关于Armadillo/C++:如何将元素从向量分配到立方体管?的主要内容,如果未能解决你的问题,请参考以下文章

如何将元素插入向量的开头?

如何将元素添加到指针向量中?

如何将值分配到向量中

如何通过将向量元素传递给函数来更改它们

如何将向量从 Cuda 直接传递到 LibSVM 结构?

将地址存储到向量中的堆栈分配对象