Mathematica中的嵌套操作

500*_*500 6 wolfram-mathematica

请考虑:

Function[subID, 
         pointSO[subID] = RandomInteger[{1, 4}, {5, 2}]] /@ {"subA", "subB"};

Manipulate[
           Manipulate[
                      Graphics[{
                                Black, Rectangle[{0, 0}, {5, 5}],
                                White,Point@pointSO[subID][[i]]
                               },
                               ImageSize -> {400, 300}], 
           {i,Range[Length@pointSO[subID]]}], 
{subID, {"subA", "subB"}}]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果pointSO[subID]实际上产生了不同长度的列表,有没有办法避免2 Manipulate给定一个操纵变量依赖于另一个?

Nas*_*ser 5

知道,我得到了你问究竟什么,但我想你想要的是类似如下:

给定具有一个变量的UI,例如可以改变大小的数组,以及另一个(从属)变量,其表示要从UI使用以索引到数组中的当前数组的索引.

但是您不希望在UI中修复索引变量布局,因为它在运行时依赖于数组的大小,该大小可以使用第二个变量进行更改.

这是一个操作,它有一个具有索引控制变量的UI,随着数组大小的变化,它在UI上动态更新.

我使用SetterBar作为索引(因变量),但您也可以使用滑块.SetterBar在UI上更清楚地了解了哪些变化.

更改数组的长度时,索引控制变量会自动更新其最大允许索引,以用于匹配数组的当前长度.

缩小数组时,索引也会缩小.

我不确定这是否是您想要的,但如果是,您可以调整此方法以适应您的问题

Manipulate[

 Grid[{
   {Style[Row[{"data[[", i, "]]=", data[[i]]}], 12]},
   {MatrixForm[data], SpanFromLeft}
   },
  Alignment -> Left, Spacings -> {0, 1}
  ],

 Dynamic@Grid[{
    {Text["select index into the array = "],
     SetterBar[Dynamic[i, {i = #} &], Range[1, Length[data]], 
      ImageSize -> Tiny,
      ContinuousAction -> False]
     },

    {
     Text["select how long an array to build = "],
     Manipulator[
      Dynamic[n, {n = #; If[i > n, i = n]; 
         data = Table[RandomReal[], {n}]} &],
      {1, 10, 1}, ImageSize -> Tiny, ContinuousAction -> False]
     , Text[Length[data]], SpanFromLeft
     }
    }, Alignment -> Left
   ],

 {{n, 2}, None},
 {{i, 2}, None},
 {{data, Table[RandomReal[], {2}]}, None},
 TrackedSymbols -> {n, i}
 ]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

更新8:30 PM fyi,刚刚对上面的代码进行了修复,以添加所需的额外逻辑.