测试两组十进制数之间的相似性(位于此链接上的 pt1 和 pt2 的 x 和 y 坐标)。我没有得到预期的布尔值计数(15,682)。会不会是十进制到二进制的转换问题?更改阈值并不总是有帮助,尤其是在有更多数字的情况下。任何帮助将不胜感激!
x 是双打的排序列表
for i = 1 to x.count-1
if Math.Abs(x(i)-x(i-1))<myThreshold then...
测试两组十进制数之间的相似性(位于此链接上的 pt1 和 pt2 的 x 和 y 坐标)。我没有得到预期的布尔值计数(15,682)。会不会是十进制到二进制的转换问题?更改阈值并不总是有帮助,尤其是在有更多数字的情况下。任何帮助将不胜感激!
x 是双打的排序列表
for i = 1 to x.count-1
if Math.Abs(x(i)-x(i-1))<myThreshold then...
由于浮点数具有一定数量的有效数字(与固定点的小数位数相反),因此绝对差异将很难区分大值和相对误差
Math.Abs(x(i)-x(i-1)) / Math.Max(Math.Abs(x(i)), Math.Abs(x(i-1)))
应改为使用。不幸的是,这往往会夸大小值之间的差异(并且对于等于零的两个值完全分解),因此对于那些绝对差异是更可取的。
您可以通过标准化差异在它们之间进行权衡
Math.Abs(x(i)-x(i-1)) / (1.0+Math.Max(Math.Abs(x(i)), Math.Abs(x(i-1))))
它倾向于幅度远大于一的值的相对差异和幅度远小于一的值的绝对差异。
尽管我喜欢复杂的答案,但cull duplicates
Grasshopper 有一个不错的功能。我在您的 1144 个值上对其进行了测试,它返回了其中 865 个是唯一的。
由于这些是要点,因此它是删除重复项的最快方法。在我的系统上,用 python 做同样的事情需要 46 毫秒 vs 1.1 秒。
当您将容差从 0 增加到 0.2 时,唯一点的数量会下降,但非常突然:
所以看起来你只有相同的点。这可能与您导出保管箱中的数据的方式有关,但由于您的所有数字都是 6dp,我认为您可以安全地使用此方法并利用 David 的所有优化内置。