FrameTicks-> ClickPane中的自动导致处理器活动不变

时间:2011-09-23 15:55:44

标签: wolfram-mathematica

我发现如果选项MatrixPlot存在,ClickPane中的FrameTicks -> Automatic导致我的某个处理器核心的活动周期大约为50%。我已将代码减少到以下(实际上没有做任何事情):

a = ConstantArray[0, {2, 11}];
ClickPane[
 Dynamic@
  MatrixPlot[a, FrameTicks -> Automatic],
 # &
 ]

enter image description here

切换到FrameTicks -> None会停止核心活动。

enter image description here

要研究处理器行为,我每20秒在ClockNone之间设置一个Automatic周期(首先删除上面的ClickPane):

ClickPane[
 Dynamic@
  MatrixPlot[a, FrameTicks -> ft],
 # &
 ]
Dynamic[ft = {Automatic, None}[[Clock[{1, 2, 1}, 20]]]]

这为我提供了以下处理器活动显示:

enter image description here

这是在我的Win7-64 / MMA 8.0.1系统上。

我的问题是:

  • 这可以在其他系统上重现吗?
  • 我做错了什么或这是一个错误?
  • 为什么裸MatrixPlot[a](没有任何FrameTicks设置)有这些奇怪的帧勾选?

enter image description here

3 个答案:

答案 0 :(得分:4)

Win XP Mma 8.0

enter image description here

错过的峰值对应于笔记本被另一个窗口隐藏的时间。失去焦点不会阻止CPU耗尽。

答案 1 :(得分:4)

似乎Automatic选项的FrameTicks设置更改了Dynamic可以看到的内部变量。显然(我认为是错误的)没有本地化。这导致完全重新评估Dynamic的参数。

解决方法将添加Refresh,这样可以使用TrackedSymbols,这样我们就可以将触发限制为我们感兴趣的变量,此案例数组aFrameTicks选项值ft

ClickPane[
 Dynamic@
  Refresh[
   MatrixPlot[a, FrameTicks -> ft],
   TrackedSymbols -> {a, ft}],
 # &
 ]
Dynamic[ft = {Automatic, None}[[Clock[{1, 2, 1}, 20]]]]

我的处理器状态现在保持接近零。

答案 2 :(得分:2)

在Mac OS X 10.6,Mathematica 8.0.1上也得到了证实。

我一开始认为,每次设置FrameTicks->Automatic选项时,这都与内核不得不重新计算刻度线的位置有关。

所以我尝试了这个并获得了相同的结果。同样适用于ArrayPlot

With[{fta = FrameTicks /. 
    FullForm[MatrixPlot[a, FrameTicks -> Automatic]][[1, 4]]},
 ClickPane[Dynamic@MatrixPlot[a, FrameTicks -> ft], # &]
  Dynamic[ft = {fta, None}[[Clock[{1, 2, 1}, 20]]]] ] 

但不是这个情节 - 两个州之间的CPU使用率几乎没有变化。:

ClickPane[
 Dynamic@Plot[Sin[x], {x, 0, 6 Pi}, Frame -> True, 
   FrameTicks -> ft], # &]
Dynamic[ft = {Automatic, None}[[Clock[{1, 2, 1}, 20]]]]

我只能猜测FrameTicks在这些栅格类型的情节中显示的方式一定效率不高。

在回答您的第三个问题时,奇怪的选择不会在我的系统上重现。

enter image description here