0

10 進数の 2 つのセット間の類似性をテストします (このリンクにある pt1 と pt2 の x 座標と y 座標)。期待されるブール値 (15,682) の数を取得できません。10進数から2進数への変換の問題でしょうか? しきい値を変更しても、特に数が多い場合は、常に役立つとは限りません。どんな助けでも大歓迎です!

x は double のソートされたリストです

for i = 1 to x.count-1
if Math.Abs(x(i)-x(i-1))<myThreshold then... 
4

2 に答える 2

2

浮動小数点数には有効数字の設定数があるため (固定小数点の設定された小数点以下の桁数とは対照的に)、絶対差は大きな値と相対誤差の間の区別が不十分です。

Math.Abs(x(i)-x(i-1)) / Math.Max(Math.Abs(x(i)), Math.Abs(x(i-1)))

代わりに使用する必要があります。残念ながら、これは小さな値間の差を誇張する傾向がある (ゼロに等しい 2 つの値では完全に崩壊する) ため、絶対差が望ましい。
正規化された差でそれらの間でトレードオフできます

Math.Abs(x(i)-x(i-1)) / (1.0+Math.Max(Math.Abs(x(i)), Math.Abs(x(i-1))))

これは、大きさが 1 よりもはるかに大きい値の相対差と、大きさが 1 よりもはるかに小さい値の絶対差の傾向があります。

于 2014-07-09T19:46:07.917 に答える
1

私は複雑な答えが好きですcull duplicatesが、Grasshopper には素晴らしい機能があります。1144 個の値でテストしたところ、865 個の一意の値が返されました。

これらはポイントであるため、重複を削除する最も速い方法です。私のシステムでは、Python で同じことを行うのに 46ms 対 1.1s です。

シンプルなカリングリグ

許容値を 0 から 0.2 に増やすと、一意のポイントの数が減少しますが、非常に突然です。

ユニークポイント数のグラフ

したがって、同一のポイントしかないようです。これは、ドロップボックスにあるデータをエクスポートした方法に関係している可能性がありますが、すべての数値が 6 dp であるため、この方法を安全​​に使用でき、David が持っているすべての最適化を利用できると思います組み込まれています。

于 2014-08-15T02:56:48.543 に答える