我想用 C++ 编写一个函数,它与histcounts
Matlab 中的函数做同样的事情,但我没有得到正确的边缘。
[V, edges]=histcounts(Vector,10);
我发现了这篇文章:在 c++ 中实现 matlab hist()并创建了一个我认为应该可以工作的函数。如何在我的函数中获得与 中相同的边缘histcounts
?
我的代码:
int n =10;
double histogrammdistance = (ceil(*max_element(std::begin(Vector), std::end(Vector)))-floor(*min_element(std::begin(Vector), std::end(Vector))))/n;
vector<double> edges;
double minY = *min_element(std::begin(Vector), std::end(Vector));
for (int i = 0 ;i <=n; i++)
{
edges.push_back(floor(minY) + histogrammdistance * i);
}
所以我现在的问题是:
i have this Vector = [-37,0329218106996 -26,9722222222222 -34,0823045267490 -33,0987654320988 -39 -35,0658436213992 -30,8061224489796 -36,0493827160494 -38,0164609053498 -12]
Matlab 创建这些边缘:
边缘[-40 -37,20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000来
但我的程序不使用 -40 来计算 binwidth..因为最小数字是 -39 而不是 -40。此外,如果我将 -39 更改为 -38.5 ... matlab 仍在选择 -40
1,问题:为什么 Matlab 采用 -40 ......并且有一个想法如何实现?
我现在用 [1 2 3 4 5] 创建了一个非常简单的向量最小数字 1 :/ 它以 [0,90 1,2 1,54 1,8 2,18....] 开头
2. 问题:sb 知道为什么需要 0.90 吗?