打印带C++的直方图
Printing Histogram with C++
我正在尝试使用 for 循环打印直方图,但是,由于某种原因,我的第二个循环应该基于 if 条件运行,但不起作用,我最终每个计数器只有 1 个"#"
。
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main () {
char hash = '#';
double list[10];
int size = sizeof(list) / sizeof(list[0]);
for(int i = 0; i < size; i++) {
list[i] = ((rand() % 10000) / 10000.0);
for(int j = 0; j < 10000; j++) {
if
(
(list[i] >= 0 && list[i] <= .1) ||
(list[i] >= .1 && list[i] <= .2) ||
(list[i] >= .2 && list[i] < .3) ||
(list[i] >= .3 && list[i] < .4) ||
(list[i] >= .4 && list[i] < .5) ||
(list[i] >= .5 && list[i] < .6) ||
(list[i] >= .6 && list[i] < .7) ||
(list[i] >= .7 && list[i] < .8) ||
(list[i] >= .8 && list[i] < .9) ||
(list[i] >= .9 && list[i] < 1.0)
)
{
list[i] += 1;
}
}
}
cout << "HISTOGRAM OF 10 COUNTERS " << endl;
for(int i = 0; i < size; i++) {
cout << "[" << i << "] t" << list[i] << "t" << string(list[i], hash) << endl;
}
return 0;
}
你的代码有很多问题,但由于这看起来像是你应该自己做的作业,所以我只解释观察到的行为:
在外部 for 循环的每次迭代中,list[i]
最初设置为 0 到 1 之间的值。您的if
状况可以缩短为list[i] >= 0. && list[i] < 1.
。它将始终在循环的第一次迭代中匹配。但随后您将1
添加到该值中。因此,它不会匹配该条件的任何后续评估,因为这样list[i]
就是1 + original value of list[i]
,它不在 0 和 1 之间。
-
您正在使用
list[]
作为随机数和直方图这是错误的!随机值应该存储在 temp 变量中,并在主循环 (
j<10000
( 中生成。 -
不应嵌套 for 循环
第一个(
i<10
(应该只是将直方图清除为零。第二个应该生成您的随机值,从中计算直方图元 bin 索引并将 bin 计数增加 1。 -
大
if
条件是不完整的,它应该是(
size=10
(计算i
指数的单个或if/else
条件。此外,它还应该使用临时随机值而不是直方图值:random_value=((rand()%10000)/10000.0); i=-1;if (random_value<0.0); else if (random_value<0.1) i=0; else if (random_value<0.2) i=1; else if (random_value<0.3) i=2; ... else if (random_value<1.0) i=9; if (i>=0) list[i]++;
但是,您的随机值在
<0.0,1.0)
范围内,因此可以通过以下方式完全删除 ifs:random_value=((rand()%10000)/10000.0); i=floor(random_value*double(size)); list[i]++;
有关更多信息,请参阅
- OpenCV 绘制 2D 直方图
你可以在那里找到C++直方图示例..
相关文章:
- 如何声明一个标准::提升直方图的向量?提升直方图的类型是什么?
- 二进制图像的空间直方图
- 如何在c++中仅使用for循环打印此代码的垂直直方图
- 创建直方图以显示每个类别/箱中带有星号的项目数量
- 打印带C++的直方图
- 将直方图的 2D 数组传递给函数 (C++)?
- 如何在OpenCV 3.4.7中计算CV_32FC1 cv::GpuMat图像的(范围)直方图
- 如何平行化直方图添加?
- 根C++直方图中的错误
- 动态分配许多 Boost::直方图对象
- 使用 OpenCV 原始指针和 lambda 作为直方图的不同结果
- 如何计算图像中每个块的直方图,然后将它们连接起来?
- C++:使用数组、指针和 for 循环制作直方图。我就在那里,我可能想得太辛苦了
- 将两个 1D 直方图合并为一个
- 使用STD :: MAP在直方图峰周围的平均值
- 使用标准库或Boost库从一组数据中计算直方图
- OPENCV MAT问题:直方图和此循环之间的差异
- 优化直方图更新
- 在OPENCV中归一化函数中的直方图
- 从直方图OPENCV中的峰中获取色调值