2016-04-02 4 views
1

を作成する最も簡単な方法。だから私は誰かがこれを行う最も簡単で最も効果的な方法を知っているかもしれないことを尋ねたいと思いますか?C++、MPI:</p> <pre><code>RandomDataInitialization(pMatrix, pVector, Size); </code></pre> <p>と私は関数RandomDataInitializationに行列AとベクトルBの値を形成しようとしています:私は、関数を作成し、私のC++ MPIプロジェクトでランダムデータ

+0

はここに私を助けて。マトリックスクラスのデータはどのようにレイアウトされていますか? –

答えて

1

一般的に。次のように標準のランダム関数の作品です

方法++ C:

  1. は、擬似ランダムエンジンを作成します。
  2. エンジンによって生成された生成されたパスの擬似乱数(
  3. (例えばuniform_int_distribution又はuniform_real_distributionなど)配布オブジェクトを作成するランダムシード(これは、STDであることの良いソース:: random_device)
  4. でそれを初期化)を配布オブジェクトに通して乱数を与えます。配列やベクトル(あなたのマトリックスのための可能性の高いストレージ・メカニズム)ランダム化するために例えば

、:

#include <random> 
#include <array> 
#include <algorithm> 


int main() 
{ 
    // a 3x3 matrix of doubles 
    std::array<double, 9> matrix_data; 

    // make an instance of a random device to generate one real random number 
    // this is "slow" so we do it as little as possible. 
    std::random_device rd {}; 

    // create the random engine and seed it from the random device 
    auto engine = std::default_random_engine(rd()); 

    // create a uniform distribution generator which gives values in the range 
    // 0.0 to 1.0 
    auto distribution = std::uniform_real_distribution<double>(0, 1.0); 

    // generate the random data by passing random numbers generated by the 
    // engine through the distribution object. 
    std::generate(std::begin(matrix_data), std::end(matrix_data), 
        [&distribution, &engine] 
        { 
         return distribution(engine); 
        }); 
} 
+0

この回答はD1がMPIを使用していることを考慮していません。複数のプロセスに分散された行列が必要な場合は、MPI IDを使用してエンジンをシードする方が理にかなっています。プロセスのいずれも同じランダムフィールドを持たない。 – Chiel

関連する問題

 関連する問題