gpt4 book ai didi

javascript - 平滑/采样算法对于简单列表有一个错误

转载 作者:行者123 更新时间:2023-12-03 02:21:22 29 4
gpt4 key购买 nike

我正在尝试平滑数字列表,出于绘图目的,我不想绘制超过 5000 个项目的图表,因为渲染时间太长,而且我们不需要额外的数据。

假设我们有一个简单的列表:

let v = [1,2,3]; // max size is 3

我们想要向列表中添加一个新的数据点:

v.push(4);

但我们需要将列表长度保持为仅 3 项。所以我们需要做这样的事情:

v = [ (1+2)/2, (2+3)/3, (3+4)/4 ];

这样,数组中只有 3 个项目,但我们合并了所有数据。

我有一些代码,我认为可以做到这一点,但我无法弄清楚为什么它会给我一些奇怪的结果,在这种情况下,大小上限为 10,而不是 3:

const util = require('util');

let x = 1;
const values = [];

setInterval(function(){

values.push(x++);

if(values.length > 10){

let prev = values.shift(), curr, i = 0;

while(true){

curr = values[i];

values[i] = (prev + curr)/2;

if(!values[i+1]){
break;
}

prev = curr;
i++;

}

console.log('after', x, 'new values array:\n', util.inspect(values));
}

},100);

结果如下所示:

  after: 53 , new values array:
[ 33.00017937119628,
35.00004360157914,
37.00000921602168,
39.0000016674212,
41.00000025298232,
43.00000003129708,
45.000000003031346,
47.00000000021555,
49.000000000010004,
51.00000000000023 ]
after: 54 , new values array:
[ 34.00011148638771,
36.00002640880041,
38.00000544172144,
40.00000096020176,
42.0000001421397,
44.00000001716421,
46.00000000162345,
48.00000000011278,
50.000000000005116,
52.000000000000114 ]
after: 55 , new values array:
[ 35.00006894759406,
37.000015925260925,
39.0000032009616,
41.00000055117073,
43.000000079651954,
45.00000000939383,
47.00000000086811,
49.00000000005895,
51.000000000002615,
53.00000000000006 ]
after: 56 , new values array:
[ 36.00004243642749,
38.00000956311126,
40.000001876066165,
42.00000031541134,
44.00000004452289,
46.00000000513097,
48.00000000046353,
50.00000000003078,
52.000000000001336,
54.00000000000003 ]

但最终,可能是因为 float ,我开始看到这一点:

after: 121 , new values array:
[ 101, 103, 105, 107, 109, 111, 113, 115, 117, 119 ]
after: 122 , new values array:
[ 102, 104, 106, 108, 110, 112, 114, 116, 118, 120 ]
after: 123 , new values array:
[ 103, 105, 107, 109, 111, 113, 115, 117, 119, 121 ]
after: 124 , new values array:
[ 104, 106, 108, 110, 112, 114, 116, 118, 120, 122 ]

这可能是因为 float ,但很奇怪。

我正在寻找的“正确”结果是一段时间内经过数组的所有数字的有限点样本

类似这样的事情:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]

可以进行采样并简化为如下所示:

[1.4, 4.5, 11.2, 16.3, 21.6]

希望这是有道理的。

最佳答案

不确定在读了几次之后我是否正确理解了这个问题,但是在分配新的数组值时,您应该使用:Math.floor( (prev + curr)/2 ) 返回 Int 或 ( (prev + curr)/2).toFixed(2) 返回 Float。

此外,我会明确说明您在数组中保留了多少个值。读起来很困惑

 values.push(x++);

if(values.length > 10){

while(true)

if(!values[i+1]){
break;
}

}

}

关于javascript - 平滑/采样算法对于简单列表有一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49141416/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com