最近我开始使用Armadillo C++库。由于我的C++编程技能不是很好,我发现这个库对于线性代数非常友好。我还将其与我的matlab一起使用,以加速许多重建算法的速度。
我确实需要创建一个布尔向量,我宁愿使用这个库而不是其他方式。但是,我无法找出如何做到这一点。我尝试使用uvec;但是,文档似乎表明它不能与布尔值一起使用。
感谢任何帮助。
祝好, Dushyant
uchar_mat
,它是Mat<unsigned char>
的typedef,它应该消耗与布尔值矩阵相同的内存。Mat<type>
可以是以下类型:float
,double
,std::complex<float>
,std::complex<double>
,short
,int
,long
和short
,int
和long
的无符号版本。但是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_igumstd::vector<bool>
吗?这是std::vector
的一个专门版本,它针对空间进行了优化。我不认为Armadillo库中存在类似的机制。因此,确实取决于您想要做什么,您最好使用std
命名空间向量类。 - Svabergchar
。但代码似乎仍然支持它。当你尝试使用 Mat<unsigned char>
时,你遇到了什么错误? - Svabergtypedef Mat <unsigned char> uchar_mat;
,因此您也应该能够使用uchar_mat
。 - Svaberg
umat
和uvec
来表示存储逻辑值的矩阵和向量。 - mtallvector <bool>
要比使用vector <char>
占用更少的空间。 - kirill_igum