C ++ случайные значения и Blitz ++

Код ниже компилируется и выполняется. Код должен инициировать блиц-матрицу к случайным значениям, но он не работает, так как каждый элемент матрицы получил одно и то же значение.

#include <iostream>
#include <array>
#include <algorithm>
#include <functional>
#include <random>
#include <blitz/array.h>

int main()
{
// random
std::random_device __device;
std::array<int, std::mt19937::state_size> __seeds;
std::normal_distribution<double> __distribution(0.0, 1.0);
std::mt19937 __engine;
std::generate_n(__seeds.data(), __seeds.size(), std::ref(__device));
std::seed_seq __sequence(std::begin(__seeds), std::end(__seeds));
__engine.seed(__sequence);

// matrix
blitz::Array<float,2> a(4,5);
a=__distribution(__engine);

// io
std::cout << a << std::endl;
}

Выход не то, что я хотел

(0,3) x (0,4)
[ -1.10231 -1.10231 -1.10231 -1.10231 -1.10231
-1.10231 -1.10231 -1.10231 -1.10231 -1.10231
-1.10231 -1.10231 -1.10231 -1.10231 -1.10231
-1.10231 -1.10231 -1.10231 -1.10231 -1.10231 ]

Как правильно инициировать блиц-матрицу для случайных значений?

0

Решение

Вы сказали сделать каждую ячейку этим значением, попробуйте это

#include <iostream>
#include <array>
#include <algorithm>
#include <functional>
#include <random>
#include <blitz/array.h>

int main()
{
// random
std::random_device __device;
std::array<int, std::mt19937::state_size> __seeds;
std::normal_distribution<double> __distribution(0.0, 1.0);
std::mt19937 __engine;
std::generate_n(__seeds.data(), __seeds.size(), std::ref(__device));
std::seed_seq __sequence(std::begin(__seeds), std::end(__seeds));
__engine.seed(__sequence);

// matrix
blitz::Array<float,2> a(4,5);
for( int i=0; i<4; ++i ) {
for( int j=0; j<5; ++j ) {
a(i, j) =__distribution(__engine);
}
}// io
std::cout << a << std::endl;
}
0

Другие решения


По вопросам рекламы [email protected]