【问题标题】:Armadillo C++ linear algebra library : How to create vector of booleanArmadillo C++ 线性代数库:如何创建布尔向量
【发布时间】:2013-09-24 19:58:19
【问题描述】:

最近我开始使用 Armadillo C++ 库。鉴于我的 C++ 编码技能不是很好,我发现这对线性代数非常友好。我还使用它和我的 matlab 来加快许多重建算法的速度。

我确实需要创建一个布尔向量,我更喜欢使用这个库而不是 .但是,我不知道该怎么做。我尝试使用 uvec;但是,文档似乎表明它不能与布尔值一起使用。

任何帮助将不胜感激。

问候, 杜夏特

【问题讨论】:

  • 犰狳一般使用umatuvec来表示存储逻辑值的矩阵和向量。
  • 我有同样的问题,希望得到vector <bool>的答案,这样占用的空间比vector <char>要少

标签: vector boolean armadillo


【解决方案1】:

考虑使用矩阵uchar_mat,它是Mat<unsigned char> 的典型定义,它应该消耗与布尔值矩阵相同的内存量。

7.8 版的Armadillo documentation 声明矩阵Mat<type> 可以是以下类型: floatdoublestd::complex<float>std::complex<double>shortintlongunsigned 版本的 shortintlong。然而,GitHub 上的代码在文件include/armadillo_bits/typedef_mat.hpp 中包含typedef Mat <unsigned char> uchar_mat;,因此您也应该能够使用uchar_mat

unsigned char 值矩阵相比,创建bool 值矩阵不会节省任何内存(bool 类型消耗8 位)。这是因为in C++ every data type must be addressable;它必须至少有 1 个字节长,以便可以创建指向它的指针。

【讨论】:

  • vector <bool> 占用的内存比 vector <char> 少很多
  • @kirill_igum 你指的是std::vector<bool>吗?这是std::vector 的专用版本,可优化空间。我认为 Armadillo 库中不存在类似的机制。因此,确实,根据您想要做什么,使用 std 命名空间向量类可能会更好。
  • 我知道这个 aswer 是旧的,但是当我知道犰狳 doc 时,没有可用的 char 类型,我现在怎样才能完成它?
  • 你说得对,文档不再提及char。不过,代码中似乎仍然支持它。尝试使用Mat<unsigned char> 时遇到什么错误?
  • 在文件include/armadillo_bits/typedef_mat.hpp中甚至还有一个声明typedef Mat <unsigned char> uchar_mat;,所以你应该也可以使用uchar_mat
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
相关资源
最近更新 更多