gpt4 book ai didi

c# - 如何在保持趋势的同时删除常规间隔中的 n% 的列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:55 24 4
gpt4 key购买 nike

因此,如果我想在 500 像素的 Canvas 上绘制图形,我无法用 200.000 个坐标来绘制线条。如何删除这个列表的 99%,同时仍然大致保持数据的趋势?

我的想法是:

for(int i = 0; i<200000; i++)
{
if(i%2000 == 0)
{
newList.Add(List[i])
}
}

我只是不确定这是否是最有效的方法。我知道某些趋势可能会在其中丢失,但它应该仍然足够好(除非有更高效、更快的算法)

Ramer–Douglas–Peucker algorithm ,我认为这是矫枉过正,而且也不是真正需要的,甚至对于我需要的东西来说效率太低。

最佳答案

与其枚举每个值并只取第 2000 个元素,我可以建议跳过所有这些值而只取第 n 个元素吗?这样它应该可以更快地完成 for 循环。

另一种选择是对 2000 点进行平均并将其添加为一个点。

我在下面包括了这两种方法:

var data = new List<float>(200000); 
var segmentLength = 2000;
var newList = new List<float>();

// Sampling, this is your idea, without enumerating over every single element
for (var i=0; i<data.Count(); i+=segmentLength)
{
newList.Add(data[i]);
}

// Averaging
for (var i=0; i<data.Count(); i+=segmentLength)
{
newList.Add(data.GetRange(i*segmentLength, segmentLength).Average())
}

关于c# - 如何在保持趋势的同时删除常规间隔中的 n% 的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56023939/

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