【发布时间】:2017-05-11 20:30:08
【问题描述】:
LIBIQTOOL_API void Hist(std::vector<double>input, std::vector<double> bins, std::vector<double>& histogram)
{
double minY = *std::min_element(std::begin(input), std::end(input));
double maxY = *std::max_element(std::begin(input), std::end(input));
std::vector<double> edges;
edges.push_back(-1 * std::numeric_limits<double>::infinity());
for (int i = 0; i < bins.size() - 1; i++)
{
edges.push_back(bins[i] + 0.0100 / 2);
}
edges.push_back(std::numeric_limits<double>::infinity());
//histC
histogram.resize(edges.size() - 1);
#pragma omp parallel for
for (int i = 0; i < input.size(); i++)
{
for (int j = 0; j < edges.size() - 1; j++)
{
if ((edges[j] < input[i]) && (input[i] <= edges[j + 1]))
{
histogram[j] = histogram[j] + 1;
break;
}
}
}
histogram[histogram.size() - 1] = histogram[histogram.size() - 1] + histogram[histogram.size() - 2];
histogram.pop_back();
}
输入向量的大小为 3,000,000++,bin 的数量约为 7000。
我采用了 Matlab 的 Hist() 函数并在 c++ 中创建了我需要的代码。
但是运行需要很长时间,您能看到更多可以在这里完成的运行时优化吗?
我做到了:
一种。当您找到放置当前号码的垃圾箱时打破
湾。使用 openMP
【问题讨论】:
标签: c++ matlab optimization