如何用犰狳在C ++中生成此矩阵?

时间:2019-01-21 14:12:41

标签: c++ armadillo

我想使用行为像“真相表”的犰狳在C ++中生成矩阵,例如:

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

我当时在想这种循环,但是我对犰狳及其数据结构并不实用。

imat A = zeros<imat>(8, 3);

/* fill each row */
for(int i=0; i < 8; i++)
{
    A.row(i) = (i/(pow(2, i)))%2 * ones<ivec>(3).t();  // 
}

cout << "A = \n" << A << endl;

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果您需要here所说的大尺寸真值表矩阵(〜2^30 x 30),从内存的角度来看,应该实现一个函数,该函数可以快速计算所需的值,而不是将其存储在矩阵中。

使用std::bitset可以很容易地做到这一点,如下所示。 请注意,N必须在此方法的编译时确定。 然后,您可以通过A(i,j)获取matrix<3>(i,j)的值:

DEMO

#include <bitset>

template <std::size_t N>
std::size_t matrix(std::size_t i, std::size_t j)
{
    return std::bitset<N>(i)[N-j-1];
}