Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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_Jquery_D3.js_Moving Average - Fatal编程技术网

Javascript 移动平均线函数是如何工作的?

Javascript 移动平均线函数是如何工作的?,javascript,jquery,d3.js,moving-average,Javascript,Jquery,D3.js,Moving Average,我正在使用d3来可视化一些数据。我的其中一个数据集的形式为: [[date,value],[date,value]等]跳跃很多,我想加入移动平均线 我从Stack Overflow中找到了这个函数作为计算移动平均值的解决方案,但我觉得使用它不合适,因为(1)我不理解它是如何工作的,而(2),它似乎不适用于我的数据 以下是函数(取自): 逐行: var movingWindowAvg = function(arr, step) { 创建一个函数,该函数包含1D数组的参数和一个步骤,该步骤决定每个

我正在使用
d3
来可视化一些数据。我的其中一个数据集的形式为:

[[date,value],[date,value]等]
跳跃很多,我想加入移动平均线

我从Stack Overflow中找到了这个函数作为计算移动平均值的解决方案,但我觉得使用它不合适,因为(1)我不理解它是如何工作的,而(2),它似乎不适用于我的数据

以下是函数(取自):

逐行:

var movingWindowAvg = function(arr, step) {
创建一个函数,该函数包含1D数组的参数和一个
步骤
,该步骤决定每个平均点使用多少值

return arr.map(function(_, idx) { 
var result = d3.sum(wnd) / wnd.length; if (isNaN(result)) { result = _; }
将数组映射到(某物?),我知道
\uu
是一个通配符运算符,类似于OCaml,而
idx
是id

var wnd = arr.slice(idx - step, idx + step + 1);
似乎
wnd
代表窗口,因此查找数据子集以用作第一个移动平均点的平均窗口

return arr.map(function(_, idx) { 
var result = d3.sum(wnd) / wnd.length; if (isNaN(result)) { result = _; }
实际计算平均值

总体
我想我的大问题是,通过这个函数,它似乎是为了找到一维数组的移动平均值。为了使用它,我必须将数据转换成一维数组,还是有办法稍微改变函数本身?我很难修改这个函数,因为它在语法上有点混乱。

我不得不承认这段代码有点混乱。如果我理解正确,它可以用于1D阵列?您希望它能够与2D阵列一起使用。我猜你想要一个带有“value”的movingWindowAvg

.map()
是一个在数组中循环的函数。所以对于第一个循环<代码>.=[0,0]和
idx=0
,然后对于第二个循环
.=[1,1]
idx=1
。要获得
\uu
的正确值,只需执行
\u=\ u[1]'

我做了一个小的转换函数来将切片的2D数组
wnd
转换为1D数组,因为我不知道d3是如何工作的

isNaN(result)只是检查结果是否不是一个数字,并将给它一个数字_

var data = [
    [0, 0],
    [1, 1],
    [2, 2],
    [3, 3]
];

var movingWindowAvg = function(arr, step) {
        return arr.map(function(_, idx) { 
          _=_[1];
          var wnd = arr.slice(idx - step, idx + step + 1); 
          alert('wnd: ' + wnd);
          var result = d3.sum(to1D(wnd)) / wnd.length;
          if (isNaN(result))
          { 
              result = _; 
              alert('not a res ' + _);
          }
          return result;
        });
};
console.log(movingWindowAvg(data, 1));

function to1D(wnd)
{
    var nwnd = new Array();
    for(var i = 0; i < wnd.length; i++)
    {
         nwnd.push(wnd[i][1]); //1 to access value   
    }
    return nwnd;

}
var数据=[
[0, 0],
[1, 1],
[2, 2],
[3, 3]
];
var movingWindowAvg=功能(arr,阶跃){
返回arr.map(函数(x,idx){
_=_[1];
var wnd=arr.slice(idx-步骤,idx+步骤+1);
警报('wnd:'+wnd);
var结果=d3.总和(to1D(wnd))/wnd.长度;
如果(isNaN(结果))
{ 
结果=;
警报('不是一个res'+979;);
}
返回结果;
});
};
日志(movingWindowAvg(数据,1));
函数TOAD(wnd)
{
var nwnd=新数组();
对于(变量i=0;i
下面是一个JSFIDLE,带有一个运行演示: