有没有比generate/accumulate更快的计算函数结果均值的方法?
Is there a faster way to calculate the mean value of function results than generate/accumulate?
这是关于计算函数的 return 个值的算术平均值。
要获取 N
函数调用的平均值,我想到了:
std::vector<double> results(N);
std::generate(results.begin(), results.end(), my_function(...));
double mean = std::accumulate(results.begin(), results.end(), 0.0) / N;
是否有 standard/modern C++ 方法可以更快地完成或省略中间向量? Boost也是一个选项。
您必须调用该函数 N
次,但您可以节省一些 space 即时计算:
double mean = 0;
for (int i = 0; i < N; ++i)
mean += my_function(...);
mean /= N;
更新:可能 现代 使用 boost 的单线方法:
double mean = std::accumulate(
boost::make_function_input_iterator(my_func, 0),
boost::make_function_input_iterator(my_func, N), 0.0) / N;
与range-v3:
auto mean = ranges::accumulate(
ranges::view::generate_n([]{ return my_function(...); }, N),
0.0) / N;
这是关于计算函数的 return 个值的算术平均值。
要获取 N
函数调用的平均值,我想到了:
std::vector<double> results(N);
std::generate(results.begin(), results.end(), my_function(...));
double mean = std::accumulate(results.begin(), results.end(), 0.0) / N;
是否有 standard/modern C++ 方法可以更快地完成或省略中间向量? Boost也是一个选项。
您必须调用该函数 N
次,但您可以节省一些 space 即时计算:
double mean = 0;
for (int i = 0; i < N; ++i)
mean += my_function(...);
mean /= N;
更新:可能 现代 使用 boost 的单线方法:
double mean = std::accumulate(
boost::make_function_input_iterator(my_func, 0),
boost::make_function_input_iterator(my_func, N), 0.0) / N;
与range-v3:
auto mean = ranges::accumulate(
ranges::view::generate_n([]{ return my_function(...); }, N),
0.0) / N;