- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
STL c++11 解决方案:
auto distribution = std::bind(std::normal_distribution<double>{mean, stddev},
std::mt19937(std::random_device{}())
);
std::transform(data.begin(), data.end(), data.begin(),
std::bind(std::plus<double>(), std::placeholders::_1, distribution()));
简单的基于范围的循环:
for (auto& d : data) {
d += distribution();
}
我的 STL 解决方案不起作用,因为它总是采用从分发中生成的第一个数字。我尝试将占位符作为第三个参数,但它没有任何改变。我所有的数据都增加了相同的数字,这不是我想要的。我想要与基于范围的循环相同的行为。
这可能吗?
最佳答案
让我们将您的第二个 bind
重写为 lambda,以了解它的实际工作原理:
auto func = std::bind(std::plus<double>(), std::placeholders::_1, distribution())
也是等价的
auto d = distribution();
auto func = [d](double x){ return std::plus<double>()(x,d); };
或者,如果我们使用 C++14 的初始化功能:
auto func = [d=distribution()](double x){ return std::plus<double>()(x,d); };
如您所见,distribution()
仅被调用一次。但是,您不想使用 distribution
的返回值,您希望在每次调用 func
时调用 distribution
。虽然可以使用 bind
来做到这一点,但 lambda 会让这件事变得容易得多:
std::transform(data.begin(), data.end(), data.begin(),
[&distribution](double x){ return x + distribution(); });
在我看来,这比您之前的 bind
更容易阅读。请注意,std::bind
(或者说 boost::bind
)早于 lambda。有some issues with lambdas在 C++11 中,与 std::bind
相比,但在 C++14 中,lambda 通常更容易处理、阅读和理解,而不会牺牲太多。
关于c++ - 将 std::transform 与 std::normal_distribution 和 std::bind 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40747726/
我想知道将 normal_distribution 放入循环中是否会出现问题。 这是以这种奇怪的方式使用 normal_distribution 的代码: std::default_random_en
我想知道 normal_distribution 函数使用哪种随机数生成器? 是否适合科学模拟应用? 问候 最佳答案 std::normal_distribution 不生成任何随机数。这是一个随机数
T 很少可以是 int,它会卡在: std::normal_distribution distribution(0.0, 0.1); 这将在我的函数的下一行中使用,我不希望所有依赖它的代码行都有一个
我正在编写蒙特卡洛模拟并实现检查点。我想获得完全相同的结果,无论我是从检查点重新启动模拟还是继续超越它。但是,我在 std::normal_distribution 中遇到了一些奇怪的行为: 我正在使
我是一名经验丰富的 C 程序员,偶尔被迫使用一点 C++。 我需要根据具有多种均值和方差的正态分布生成随机数。如果我有一个名为 normal(float mean, float var) 的 C 函数
我正在尝试使用 C++ STD TechnicalReport1 扩展生成服从正态分布的数字,但是此代码(改编自 this article): mt19937 eng; eng.seed(SEED);
我要生成一组正态分布的伪随机数。据我所知,std 库为此提供了以下代码: std::random_device rd; std::mt19937 gen(rd()); std::normal_dist
这个 std::mt19937 gen(123); std::normal_distribution<> distr(0., .2); printf("%f", distr(gen)); 版画 0.3
我注意到 GNU C++ 标准库有一个非常奇怪的行为。 当使用具有正态分布的自定义生成器时,即使对于相同的生成器结果,分布似乎也可能返回不同的值。 示例代码 #include #include #
我正在使用以下例程生成从高斯/正态分布中选择的随机数: 当所有内容都在一个文件中进行编译时,它相当简单: #include #include #include using namespace s
我正在尝试将 TR1 用于某些 C++ 项目。不幸的是我收到一个错误并且不明白为什么或者我应该如何正确地做这件事!我在 Linux 下使用 gcc 4.4.5 工作。 我得到了错误 myfile.cp
在 gcc 实现中,这很简单;仅应用参数 as simple multiply and shift of the actual algorithm's output .但我可以想象其他算法会遇到像这样
我有一个大 vector ,我想给它添加正态分布的噪声。我现在正在做的是微不足道的 for 循环: for (int i=0 ; i nd(0.0 , 1.0); boost::variat
我正在尝试将高斯噪声添加到 vector 的元素中,因此我想在我的代码中使用 std::normal_distribution 模板。我正在查看此链接中的示例:Normal distribution
我想在 C++11 中使用 normal_distribution 生成数字。使用 Qt 4.8 MinGW。我添加了下一行 QMAKE_CXXFLAGS += -std=c++0x 到我的 .pro
我想获得 [0.0,1.0] 范围内的随机 float ,所以这些数字中的大部分应该在 0.5 左右。因此我想出了以下功能: static std::random_device __randomDev
我想在信号中引入高斯噪声。我研究了几个如何使用 C++11 std::normal_distribution 的例子,我能够使用这个例子获得预期的随机结果:https://stackoverflow.
谁能带我去某个地方真正谈论支撑这两个 normal_distribution 和 default_random_engine 的数学。据我了解使用梅森扭曲器?如果是的话,任何人都可以向我指出一些在线资
// construct a trivial random generator engine from a time-based seed: unsigned seed = std::chrono::
我正在使用 Mersenne twister,以便在 Matlab 和 C++ 中的项目之间获得一致的随机值。但在使用 randn 或 C++11 的 normal_distribution 时,我无
我是一名优秀的程序员,十分优秀!