【问题标题】:C++ random values and Blitz++C++ 随机值和 Blitz++
【发布时间】:2015-04-01 18:59:06
【问题描述】:

下面的代码正在编译和运行。代码应该将 Blitz-matrix 初始化为随机值,但它会失败,因为矩阵的每个元素都具有相同的值。

#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 ]

将闪电战矩阵初始化为随机值的正确方法是什么?

【问题讨论】:

  • 您不得在 C/C++ 中的任何名称中使用 __

标签: c++ random blitz++


【解决方案1】:

你说让每个单元格都有这个值,试试这个

#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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多