2011-07-11 7 views
2

私は特定のタイプのノード(特定のパターンに従うノード)だけを集めたいツリー(式)を持っています。Mathematica - ツリー内のノードを選択的に集める

 
A = {{{{},{0.3,0.3}},{0.2,0.2}},{0.1,0.1}}; 
TreeForm[A, PlotRangePadding->0] 
Cases[A, {x_Real, y_Real}, Infinity] 

出力:

enter image description here

これはそれを行うための良い方法です私は、下記の簡略化した例がありますか?

{x1_、y1_}、{x2_、y_2}}を検索したい場合は{x_、y_}のような式を除外することはできますか?

よろしく

EDIT(14/07/2011)

IはList以外のヘッドを使用して大幅に衝突することなく、そのようなサブ式を見つけることに役立つことを発見しました。例えば

、上記を改質:

A = {{{{}, pt[0.3, 0.3]}, pt[0.2, 0.2]}, pt[0.1, 0.1]}; 
List @@@ Cases[A, _pt, Infinity] 

出力:

{{0.3,0.3},{0.2,0.2},{0.1,0.1}} 

答えて

3

をあなたの質問の後半部分、すなわち、約、{{a,b},{c,d}}を選択し、どの程度

b = {{{{}, {0.3, 0.3}}, {0.2, 0.2}}, {{0.1, 0.1}, {0.3, 0.4}}}; 
TreeForm[b] 
Cases[b, {{a_, b_}, {c_, d_}} /; (And @@ NumericQ /@ {a, b, c, d}), Infinity] 

(そのため、数字はRealである必要はありませんが、数字で入力してください)

+0

NumericQのアイデアをありがとう。私は別の場所でx_Real | x_Integerパターンを使用していましたが、置き換えます。 –

1

ここでは、使用されるaclの形式の代わりに、わかりやすいものがあります。

b = {{{{}, {0.3, 0.3}}, {0.2, 0.2}}, {{0.1, 0.1}, {0.3, 0.4}}}; 

With[{p = _?NumericQ}, Cases[b, {{p, p}, {p, p}}, -1] ] 
+0

+1。それは優れた点です:私が私の答えで書いたコードは、精神的に今解析するのは難しいです。 – acl

関連する問題