gpt4 book ai didi

javascript - 删除坐标列表中接近相同的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:39:40 25 4
gpt4 key购买 nike

我有一个与此类似的值列表:

[[100,100],[101,101],[101,103],[102,103],[104,101],[103,101],[542,121],[943,123]]

我想将接近值减少为单个值 - 它可以是平均值,但我不受限于该特异性 - 同时保持唯一值。

因此,从该示例列表中,我想得到如下内容:

[[101,103],[542,121],[943,123]]

我考虑过对值进行除法和舍入,去掉重复值,然后将它们相乘以达到我的比例,但这会给我一个结果

[[100,105],[540,120],[945,125]]

并且我想保持唯一值的唯一性。

最佳答案

假设“相似”的意思是“相同中心值的 20 以内”——即在其组合质心的 20 以内的所有点的集合。 (当然,20 是任意的和可配置的。)然后你可以像这样减少列表(假设初始数组称为 data):

const threshold = 20;
const thresholdSq = threshold ** 2;
const groups = data.reduce((map, pair) => {
let mini = Infinity, match = null;
map.forEach(list => {
const avg = list.reduce((sum, point) => {
sum[0] += point[0];
sum[1] += point[1];
return sum;
}, [].concat(pair));
avg[0] /= 1 + list.length;
avg[1] /= 1 + list.length;
const distSquared = (avg[0] - pair[0]) ** 2 + (avg[1] - pair[1]) ** 2;
if (distSquared < mini && distSquared <= thresholdSq) {
mini = distSquared;
match = list;
}
});
if (match) {
match.push(pair);
} else {
map.push([pair]);
}
return map;
}, []);
const result = groups.map(list => {
const sum = list.reduce((acc, v) => {
acc[0] += v[0];
acc[1] += v[1];
return acc;
}, [0,0]);
sum[0] /= list.length;
sum[1] /= list.length;
return sum;
});

对于您的示例数据,结果变为:

[[101.83333333333333, 101.5], [542, 121], [943, 123]]

它并不完全是您指定的输出,但它确实保留了唯一值并为您提供了其他点组的平均值。

关于javascript - 删除坐标列表中接近相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58174359/

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