测试两组十进制数字之间的相似性(位于this link上的pt1和pt2的x和y坐标)。我没有得到预期的布尔值计数(15,682)。可能是decimal to binary conversion问题吗?更改阈值并不总是有帮助,特别是对于更多数字。任何帮助将不胜感激!
x是双打的排序列表
for i = 1 to x.count-1
if Math.Abs(x(i)-x(i-1))<myThreshold then...
答案 0 :(得分:2)
由于浮点数具有一定数量的有效数字(与固定点的设定小数位数相反),绝对差值将在较大值和相对误差之间区别较差
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))))
对于幅度远大于1的值的相对差异,以及幅度远小于1的值的绝对差值。
答案 1 :(得分:1)
尽管我喜欢复杂的答案,但Grasshopper中有一个很好的cull duplicates
功能。我在你的1144个值上测试了它,它返回了865个独特的值。
由于这些是分数,因此它是删除重复项的最快方法。在我的系统上,与python做同样的事情是46ms vs 1.1s。
当您将容差从0增加到0.2时,唯一点的数量会下降,但非常突然:
所以看起来你只有相同的观点。这可能与您导出Dropbox中的数据的方式有关,但是因为您的所有数字都是6dp我认为您可以安全地使用此方法并利用David所拥有的所有优化内置。