piecewise_linear_distribution
random[meta header]
std[meta namespace]
class template[meta id-type]
cpp11[meta cpp]
namespace std {
template <class RealType = double >
class piecewise_linear_distribution ;
}
piecewise_linear_distributionは、区間ごとの重み付けを線形に接続した分布を生成するクラスである。
このクラスはコンストラクタに、値の区間を表す数列と、区間ごとに線形に変化する重みの数列を設定する。
パラメータを、区間 {0.0, 1.0, 2.0}、重み {0.0, 0.5, 0.0}のように設定した場合、区間[0.0, 1.0)の値が出現する確率は、重み数列によって[0.0, 0.5)に線形に上昇する。区間[1.0, 2.0)の値が出現する確率は、重み数列によって[0.5, 0.0)に線形に減少する。
テンプレートパラメータは、以下を意味する。
名前
説明
対応バージョン
(constructor)
コンストラクタ
C++11
~piecewise_linear_distribution() = default;
デストラクタ
C++11
reset
状態をリセットする
C++11
型
説明
対応バージョン
result_type
乱数生成結果の型 RealType。
C++11
param_type
分布パラメータの型。未規定。
C++11
#include < fstream>
#include < random>
#include < array>
#include < cstdint>
int main ()
{
std::random_device seed_gen;
std::uint32_t seed = seed_gen ();
std::default_random_engine engine (seed);
// [0.0, 5.0)の値は、出現確率が0.0から0.5まで線形に上昇する。
// [5.0, 10.0)の値は、出現確率が0.5から0.1まで線形に減少する。
std::array<double , 3 >
intervals = {0.0 , 5.0 , 10.0 },
densities = {0.0 , 0.5 , 0.1 };
std::piecewise_linear_distribution<> dist (
intervals.begin (),
intervals.end (),
densities.begin ()
);
std::ofstream file (" piecewise_linear_distribution.tsv" );
for (int i = 0 ; i < 1000 ; ++i) {
double result = dist (engine);
file << result << " \n " ;
}
}
std::piecewise_linear_distribution[color ff0000]
intervals.begin()[link /reference/array/array/begin.md]
intervals.end()[link /reference/array/array/end.md]
densities.begin()[link /reference/array/array/begin.md]
std::ofstream[link /reference/fstream/basic_ofstream.md]
dist(engine)[link piecewise_linear_distribution/op_call.md]
このプログラムによってある時に得られた結果(piecewise_linear_distribution.tsv )を図示する。