Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的简单直方图算法_Javascript_Algorithm_Histogram - Fatal编程技术网

Javascript中的简单直方图算法

Javascript中的简单直方图算法,javascript,algorithm,histogram,Javascript,Algorithm,Histogram,我正在创建一个直方图算法。我遵循提供的解决方案 我只想简单地计算每个值出现的次数 然而,我不能完全得到正确的算法。我的代码是: var values = [2, 4, 6, 3, 3]; var val_max = 6; var val_min = 2; var num_bins = parseInt(val_max - val_min + 1); console.log('num_bins is ', num_bins); var bin_width = (val_max-val_min

我正在创建一个直方图算法。我遵循提供的解决方案

我只想简单地计算每个值出现的次数

然而,我不能完全得到正确的算法。我的代码是:

var values = [2, 4, 6, 3, 3];

var val_max = 6;
var val_min = 2;

var num_bins = parseInt(val_max - val_min + 1);
console.log('num_bins is ', num_bins);

var bin_width = (val_max-val_min)/num_bins;
console.log('bin_width is ', bin_width);

var to_plot = [];

for (var i = 0; i < num_bins; i++) {
  to_plot.push(0);
}

for (var x = 0; x < values.length; x++) {

    var bin_idx = parseInt((values[x] - val_min) / bin_width); 

    to_plot[bin_idx] = to_plot[bin_idx] + 1; 
}

console.log('to_plot is ', to_plot);
我希望最后一个索引是“1”。但问题是,对于接近最大值的值,
bin_idx
超出范围。我如何调整它,以便得到以下结果

to_plot is  [1, 2, 1, 0, 1] 

JSFIDLE是

我认为你的
宽度
是错误的。请尝试此计算:

var bin_width = (val_max - val_min) / (num_bins - 1);

这使得
bin_width==1
可以让其余的代码工作。

由于bin的数量等于
val_min
val_max
之间的整数数量,因此
bin_width
是1,而不是当前计算的0.8。这里基本上是在计算整数。使用此循环生成直方图:

for (var x = 0; x < values.length; x++) {
    to_plot[values[x] - val_min] ++;
}
for(var x=0;x
以下是我要做的:

const data=[2,4,6,3,3];
打印(直方图(数据,1));//[1, 2, 1, 0, 1]
打印(直方图(数据,2));//[3, 1, 1]
打印(直方图(数据,3));//[4, 1]
打印(直方图(数据,4));//[4, 1]
打印(直方图(数据,5));//[5]
功能直方图(数据、大小){
设min=无穷大;
设max=-无穷大;
用于(常量数据项){
如果(项目<最小值)最小值=项目;
否则,如果(项目>最大值)最大值=项目;
}
常数箱=数学单元((最大-最小+1)/大小);
常量直方图=新数组(箱)。填充(0);
用于(常量数据项){
柱状图[数学楼层((项目-最小)/尺寸)]++;
}
返回直方图;
}
功能打印(x){
log(JSON.stringify(x));

}
是的,没错,我会采用这一解决方案。这很有效。看起来我必须使用对数刻度,因为有些值太大了。因此,这很好地工作,我将与浮动工作。谢谢这回答了你的问题吗?
for (var x = 0; x < values.length; x++) {
    to_plot[values[x] - val_min] ++;
}