MapThread,Manipulate,Filter in Mathematica

时间:2011-07-03 03:27:50

标签: select wolfram-mathematica

我希望能够很快恰当地提出这个问题。

请考虑:

list1 = Tuples[Range[1, 5], 2];

list2 = Tuples[Range[3, 7], 2];

* 我使用以下机制在显示期间显示所有过滤的眼睛注视。 *

Manipulate[Row[
               MapThread[Function[{list},
                         Graphics[
                         Point[{#[[1]], #[[2]]}]& /@ Select[list,
                                                     (#[[1]] > f1 && #[[2]] > f2) &], 
                         Frame -> True, PlotRange -> {{0, 10}, {0, 10}}]], 
              {{list1, list2}}]], 
{f1, 0, 10}, {f2, 0, 10}]

现在,我想累计显示每个固定(点)一次。

那是:

给出

list1 = {{1, 1}, {1, 2}, {1, 3}, {1, 4}, {1, 5}, {2, 1}, {2, 2}, {2, 3}, {2, 4}, 
         {2, 5}, {3, 1}, {3, 2}, {3, 3}, {3, 4}, {3, 5}, {4, 1}, {4, 2}, {4, 3}, 
         {4, 4}, {4, 5}, {5, 1}, {5, 2}, {5, 3}, {5, 4}, {5, 5}}

使用滑块在此处显示1到25个点。但在过滤1到长度@过滤数据后

控制固定编号的滑块还有一个固定的边界(25),而它应该有一个等于已过滤列表的长度。

但由于Mapthread而有2个。

我无法将Mapthread扩展到Manipulate Control,我可以吗?

Manipulate[Row[MapThread[Function[{list},
                         Graphics[
                         Point[{#[[1]], #[[2]]}]& /@ Select[list,
                                                     (#[[1]] > f1 && #[[2]] > f2) &]
                                                     [[1 ;; dd, All]], 
                         Frame -> True, PlotRange -> {{0, 10}, {0, 10}}]], 
              {{list1, list2}}]], 
{f1, 0, 10}, {f2, 0, 10},{dd,0,25}]

2 个答案:

答案 0 :(得分:2)

也许是这样的:

(注意代码效率)

list1 = Tuples[Range[1, 5], 2];
list2 = Tuples[Range[3, 7], 2];
f = (Select[#, (#[[1]] > f1 && #[[2]] > f2) &] &);
Manipulate[
 Row@Graphics[Point@#, Frame -> True, PlotRange -> {{0, 10}, {0, 10}}] & /@ 
  Map[Map[f, {#}][[All, 1 ;; Min[dd, Length @@ Map[f, {#}]], All]] &,
  {list1, list2}], 
  {f1, 0, 10}, {f2, 0, 10}, {dd, 0, 25, 1}]

enter image description here

答案 1 :(得分:1)

使用{dd, 0, 25, 1}试用。这两者都允许它正确地解析(关闭括号)并保持它真实,可以说,阻止dd被真正重视。