Armadillo C++线性代数库:如何创建布尔向量

6

最近我开始使用Armadillo C++库。由于我的C++编程技能不是很好,我发现这个库对于线性代数非常友好。我还将其与我的matlab一起使用,以加速许多重建算法的速度。

我确实需要创建一个布尔向量,我宁愿使用这个库而不是其他方式。但是,我无法找出如何做到这一点。我尝试使用uvec;但是,文档似乎表明它不能与布尔值一起使用。

感谢任何帮助。

祝好, Dushyant


1
Armadillo通常使用umatuvec来表示存储逻辑值的矩阵和向量。 - mtall
我有同样的问题,并期望得到一个答案,使用 vector <bool> 要比使用 vector <char> 占用更少的空间。 - kirill_igum
1个回答

6
考虑使用矩阵uchar_mat,它是Mat<unsigned char>的typedef,它应该消耗与布尔值矩阵相同的内存。
版本7.8的Armadillo文档说明矩阵Mat<type>可以是以下类型:floatdoublestd::complex<float>std::complex<double>shortintlongshortintlong的无符号版本。但是GitHub上的代码在文件include/armadillo_bits/typedef_mat.hpp中包含typedef Mat <unsigned char> uchar_mat;,因此您也可以使用uchar_mat
与创建布尔值矩阵相比,创建unsigned char值矩阵不会节省任何内存(bool类型占用8个位)。这是因为在C++中,每种数据类型都必须是可寻址的,它必须至少为1个字节长,以便可以创建指向它的指针。

vector <bool>vector <char> 占用更少的内存。 - kirill_igum
@kirill_igum,您是在指std::vector<bool>吗?这是std::vector的一个专门版本,它针对空间进行了优化。我不认为Armadillo库中存在类似的机制。因此,确实取决于您想要做什么,您最好使用std命名空间向量类。 - Svaberg
1
我知道这个答案很旧,但是当我现在查看armadillo文档时,没有char类型可用,现在我该怎么做? - v.tralala
你说得对,文档中不再提到 char。但代码似乎仍然支持它。当你尝试使用 Mat<unsigned char> 时,你遇到了什么错误? - Svaberg
在文件include/armadillo_bits/typedef_mat.hpp中甚至有一个语句typedef Mat <unsigned char> uchar_mat;,因此您也应该能够使用uchar_mat - Svaberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接