犰狳矩阵中的多种数据类型

Posted

技术标签:

【中文标题】犰狳矩阵中的多种数据类型【英文标题】:multiple datatype in a armadillo matrix 【发布时间】:2019-12-08 16:06:27 【问题描述】:

我想在犰狳中创建一个矩阵,它可以在一个矩阵中保存不同的数据类型。例如,我想要一个包含三个整数列、一个浮点列和一个具有枚举值的列的矩阵。有什么解决办法吗?

【问题讨论】:

看起来您不想用它来进行数学计算?因为听起来您想滥用矩阵来表示其他数据结构。也许对象的向量会相同。 @churill 我只是询问有关犰狳的可能性。如您所知,Matlab 可以保存具有不同数据类型的复杂矩阵。换句话说,Matlab 不关心数据类型,而是在矩阵的单元格中保留您想要的任何内容。 @Alireza_Armn 但你必须想想原因,你为什么要这样做。你想用它来做一些计算吗?您可以轻松地将整数和枚举值转换为浮点数。或者你想代表一些数据结构,每行代表一个实体?那么向量可能会更好。我不知道犰狳是如何工作的,我只是想帮助您避免可能会变得丑陋的设计决策,因为它听起来像 XY-Problem @churill 感谢您的帮助。让我解释一下 X 问题;)我想在一个矩阵中保留一些不同维度的矩阵。我的任务是将 Matlab 代码转换为 c++ 代码,使代码结构与原始 Matlab 代码保持一致。 @Alireza_Armn 在 C++ 中,最好在类中组织信息,而不是将其作为原始值存储在某个矩阵中。 【参考方案1】:

犰狳矩阵内部将所有元素存储为元素数据类型的标准 C 数组。这意味着所有元素必须具有相同的类型。这对犰狳来说很有意义,因为它旨在用于线性代数和数值计算,而不是作为通用容器。

对于您的特定情况,最好简单地创建分离的对象。例如,您可以创建一个整数矩阵(arma::imat 或 arma::umat,具体取决于您是否需要符号)、一个浮点向量(arma::vec),对于枚举列,您可以使用 std::向量。

如果您总是想将它们放在一起(例如,轻松地将它们作为参数传递),则可以创建一个包含三个字段的结构来存储这些对象(或使用元组)。

【讨论】:

以上是关于犰狳矩阵中的多种数据类型的主要内容,如果未能解决你的问题,请参考以下文章

当 B 是犰狳中的对称矩阵时的 A * B 计算

矩阵形成中的奇怪行为(C++,犰狳)

使用 Rcpp 通过引用传递犰狳稀疏矩阵

如何将值附加到犰狳矩阵?

如何在犰狳中按元素划分2个稀疏矩阵?

打印精度高达小数点后 4 位的双精度数据类型 - Armadillo