2011-11-07 12 views
4

Mathematicaのデータリストの要素を削除しようとしていますが、SelectUnionの仕組みがわかりません。例えば、私は次のリストにデータリストの重複ポイントの選択

list = {{0.10,0.20},{1.10,0.20},{0.70,0.80},{0.20,1.10}, 
    {1.20,1.20},{0.12,0.18},{0.68,0.76}} 

を持っているだけ0.05の距離半径内のポイントが重複していることを考慮(0,1)x(0,1)の要素を必要とします。この例では、

list1 ={{0.10,0.20},{0.70,0.80}} 

要素は等価クラスを表していますが、私は気にしません。イムは、次の操作を行う:

list1 = Select[list, 0 < Part[#,1] <1 &];Select[list,0 < Part[#,2] <1 &] 

ウィッヒは(0,1)x(0,1)でポイントを与えますが、私は、このような

Union[list1, SameTest -> (Abs[#1-#2] < 0.05 &)] 

として、Unionを使用しようとする場合、私はスロットエラーを取得します。

誰かに私にそれをきれいに説明する方法を教えてもらえますか?

DeleteDuplicates[list1, Abs[Part[#1, 1] - Part[#2, 1]] < 10^-6 &] 

を使用して

--- EDIT ---

は、トリックを行いますが、私はリストのリストで動作カント私はなぜだろうか。

+2

私はStackOverflowのにあなたを歓迎し、我々は通常、ここで行う3つのことを思い出させるために許可する:あなたが助けを受けると1)、あまりにもそれを与えることを試みる**質問に答える**にあなたの専門分野2)[「よくある質問を読む」](http://tinyurl.com/2vycnvr)3)良いQ&Aを見たら、「灰色の三角形を使って」投票してください(http:// i .imgur.com/kygEP.png)。システムの信頼性は、ユーザーが知識を共有して得た評判に基づいているためです。また、あなたの問題をより良く解決する答えを受け入れることを忘れないでください。もしあれば、[チェックマークを押してください](http://tinyurl.com/4srwe2t) –

答えて

4

これにはいくつかの方法があります。あなたの要素が特定の間隔であることが必要なので、それを行うための1つの方法は、最もきれいだと思う、IntervalMemberQSelectを使用することです。例えば

(0,1)x(0,1)でそれらの点にごリストを絞り込むために:第二に

list01 = Select[list, And @@ IntervalMemberQ[Interval[{0, 1}], #] &] 

Out[1]= {{0.1, 0.2}, {0.7, 0.8}, {0.12, 0.18}, {0.68, 0.76}} 

、このタスクに最適なツールである、重複を排除DeleteDuplicatesを使用します。あなたはIntervalMemberQを使用して同じテストを使用することができます。

DeleteDuplicates[list01, 
And @@ IntervalMemberQ[Interval[{0, 0.5}], Abs[#1 - #2]] &] 

Out[2]= {{0.1, 0.2}, {0.7, 0.8}} 
+0

ありがとうございました。これは問題を解決します。私が理解できないのは、この場合にスロットエラーがない理由です。私がPartを使用する理由です。 – Pragabhava

+0

@Manuel 'DeleteDuplicates'はすべての要素のペアをチェックします。各要素は' list01'のサブリストです。スロット「#1」は対の第1のものを指し、「#2」は第2のものを指す。 – abcd

+0

私はそれが好きです。しかし時には欺いている。例えば ​​'list01 = Union [タプル[{1、0}、2]、{{1/2、1/2}}]'を試してください。 {0,0}を返しますが、{1,1}は等価範囲外です。 –

関連する問題