gpt4 book ai didi

arrays - 如何从 Perl 数组值中获取均匀分布的样本?

转载 作者:行者123 更新时间:2023-12-02 09:01:36 24 4
gpt4 key购买 nike

我有一个数组,其中包含 0 到 360 之间的许多值(如圆的度数),但分布不均匀:

1,45,46,47,48,49,50,51,52,53,54,55,100,120,140,​​188,210,280,355

现在我需要将这些值减少到例如仅 4 个,但尽可能均匀地分布值。

如何做到这一点?

谢谢,一月

最佳答案

将数字放在一个圆圈上,就像时钟一样。现在构建一个逻辑十字,例如在 12 点、3 点、6 点和 9 点钟方向。将 12 放在第一个数字处。现在找到最接近 3 点、6 点和 9 点钟方向的数字,并记录这三个数字与第一个数字旁边的距离之和。

通过顺时针旋转十字顶部(12 点钟位置)进行迭代,直到它与下一个数字完全对齐。再次测量最近的数字与其他三个交叉点的距离,并将该分数记录在当前 12 点钟数字旁边。

重复此操作,直到 12 点钟一直旋转到原来的 3 点钟,此时就完成了。分配给它的总和最小的数字决定获胜配置。

此解决方案可推广到您希望将集合减少到的任何值范围 R 任意数量的 N 个最终点。 “十字架”上的每个点彼此之间都是 R/N 距离,您只需旋转,直到十字架的顶部到达下一个 ARM 在原始位置的位置。因此,如果您想要 6 个点,您将拥有一个 6 点十字,每个点相距 60 度,而不是一个 4 点十字,每个点相距 90 度。如果您的范围不同,您仍然执行相同的操作。这样你就不需要物理时钟和交叉来实现这个算法:它适用于任何 R 和 N。

从 Perl 的角度来看,我对这个答案感觉很糟糕,因为我没有设法在解决方案中包含任何美元符号。 :)

关于arrays - 如何从 Perl 数组值中获取均匀分布的样本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4252089/

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