将模块定义为 Manipulate 表达式的一部分与在初始化部分中定义有任何性能问题吗?

2024-05-03

我想问是否有人知道任何问题(性能或其他),如果要定义/放置 Manipulate 表达式使用的模块,就在 Manipulate 表达式本身内部,而不是在初始化部分,通常是在哪里完成的。

两种方法都有效,但是当涉及到从模块直接访问 Manipulatedynamics 时,语义并不相同(相对于它们作为参数传递给模块,这实际上是更好的方法,但我现在正在尝试一些东西)

我不知道这些东西是如何实现的,但我担心如果我把所有模块都放在Manipulate表达式中,那么当有很多模块时Manipulate会变慢,因为每次需要刷新表达式时,Mathematica FE 将向内核发送一个现在更大的表达式来重新评估/解析或任何正确的术语。

现在刷新的 Manipulate 表达式现在要大得多,因为模块现在是 Manipulate 表达式本身的一部分,而不是在初始化部分中,即使其中一些模块可能不会在每次刷新中调用,也会发生这种情况。

为了帮助更多地解释这个问题,我在下面制作了一个小图来展示我的意思,并排比较这两种方法。下面,我还放置了图中使用的小代码示例:

表达式部分方法的代码

Manipulate[
foo[]:=Module[{},
x++
];
ctrl;
foo[],

Button["step",{ctrl++ }],
{{ctrl,0},None},
{{x,0},None},
TrackedSymbols:>{ctrl}

]

模块初始化方法的代码

Manipulate[
 ctrl;
 foo[],

 Button["step", {ctrl++ }],
 {{ctrl, 0}, None},
 {{x, 0}, None},
 TrackedSymbols :> {ctrl},

 Initialization :>
  {
   foo[] := Module[{},
     x++
     ]
   }
 ]

问题是:modules-inside-manipulate 表达式方法会影响性能吗?

添加注释:

顺便说一句,在我当前的小型演示中,我没有注意到这两种方法有任何性能差异,但这只是基于观察演示的响应,没有精确的测量。可能我对 Manipulate 初始化部分的理解一直不正确。从帮助中可以看出:

Initialization is an option for Dynamic, DynamicModule, Manipulate, 
and related constructs that specifies an expression to be evaluated when 
the construct is first used or displayed.

看来我对它的理解可能与它的含义不同。

也许 Manipulate 每次都会评估所有模块,作为其表达式刷新/更新的一部分?

不管怎样,如果这两种布局没有性能差异,我会很高兴,因为从现在开始,我将把所有模块放在 Manipulate 表达式本身中,而不是放在初始化部分中。

补充 2001 年 12 月 19 日 11 点我查看了下面发布的向导先生解决方案。据我所知,查看 Manipulate 快照,生成的代码相当于显式地将模块放入 Manipulate 表达式中。下面的屏幕截图显示了两种方法以及每个布局的结果代码(通过使用快照选项按钮由 Manipulate 函数生成)。我们可以看到这是相同的代码。

但是Mr Wizard使用的技巧是允许将函数放在Control->None中,即只写foo代替foo[]这是我没想到的。我一直认为一个人必须写foo[]:=Module[...]即使foo不接受任何争论。 (实际上我从来没有想过,即使不带参数,我也很自然地在每个函数名的末尾写上 [] )。感谢您分享这个技巧。


我认为这必须是特定于应用程序的。您可以插入Pause[1];之前的表达式foo[]:=在这两个例子中确认重新评估不会发生在Initialization方法,而在另一种方法中也是如此。评估你的表达需要多少时间的问题是你最有资格回答的问题。你为什么不把所有的定义放在一个大的Do循环和计时吗?

另外,虽然我通常不会推荐它,但由于您在限制下工作,也许您正在打开这种性质的黑客:

Manipulate[
  ctrl; foo[],
  Button["step", {ctrl++}],
  {{ctrl, 0}, None},
  {{x, 0}, None},
  {{foo, Module[{}, x++] &}, None},
  TrackedSymbols :> {ctrl}
]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将模块定义为 Manipulate 表达式的一部分与在初始化部分中定义有任何性能问题吗? 的相关文章

  • 在更高抽象级别上进行概率计算

    对于反对者 这不是一个关于数学的问题 这是一个 关于编程语言的问题数学 Mathematica 的主要特征之一是它可以象征性地处理许多事物 但仔细想想 很多象征性特征实际上只是半个象征性 以向量为例 我们可以有一个像 x y z 这样的符号
  • 为什么 Mathematica 会打破模块中正常的作用域规则?

    正如最近的一篇文章中指出的post https stackoverflow com questions 2733239 lexical and dynamic scoping in mathematica local variables w
  • 当 DownValues 已经存在时可以阻止 OwnValues 吗?

    对于已经分配了与名称 a 关联的 DownValues 的情况 是否有一种可接受的方法来阻止将 OwnValues 分配给相同的名称 我最初是在尝试某人实现数据字典时遇到这个问题的 这就是我要避免的 Remove a a 1 somethi
  • mathematica 可以做一些平面几何绘图吗

    我正在尝试使用计算机来显示一些平面几何图 我不知道什么软件可以做到这一点 也不知道mathematica是否可以轻松地生成这样的图 例如 我有以下情节要展示 给定任何三角形 ABC 设 AD 为平分角 BAC 并与 BC 相交于 D 的线
  • 将“GatherBy”的转换应用于不同的列表

    I have listA and listB大小相同 我正在做GatherBy on listA 这会重新排列该列表 将相同的重排应用于listB 例如 listA 1 2 3 listB a b c listA1 GatherBy 1 2
  • Mathematica 中的“upvalue”是什么意思以及何时使用它们?

    To me g f g x h x 只是详细地等价于f g x h x 你能举一个你必须使用的例子吗 实际上 g f g x h x 不等于f g x h x 后者将定义与f while and 和它的 将定义与g 这是一个至关重要的区别
  • 将声音导出为 WAV 文件

    我从来没有在 Mma 中过多地使用声音 I have t Sound List Violin SoundNote 6 我怎样才能导出t作为 WAV 文件 当我尝试显而易见的事情时 Export c test wav t I get 在这个旧
  • Mathematica“AppendTo”函数问题

    我是 Mathematica 的新手 在向数据表添加列时遇到了重大故障 我在 Vista 中运行 Mathematica 7 我在RFD上花了很多时间才来这里问 我有一个包含三列五行的数据表 mydata 我正在尝试将两个包含五个元素的列表
  • 从稀疏定义列表中挑选无模式下值的算法

    我有以下问题 我正在开发一个随机模拟器 它随机采样系统的配置 并存储每个配置在特定时间实例被访问次数的统计数据 代码大致是这样的 f Integer Integer 0 someplace later in the code e g ind
  • 如何用矩阵的一些不连续的行和列形成子矩阵

    我有一个 10 x 10 矩阵 我想从这个主矩阵形成一个子矩阵 使用除第一 第二和第八列和行之外的所有行和列 我知道 Part 可以用来形成子矩阵 但这些示例主要是关于仅使用连续的行和列形成子矩阵 如果这是你的矩阵 tst RandomIn
  • 将符号暴露给 $ContextPath

    有多种Internal 有用的上下文函数 例如InheritedBlock https stackoverflow com questions 4198961 what is in your mathematica tool bag 568
  • 从 Mathematica 中的 Web 设置用户代理导入

    当我使用 Mathematica 连接到我的网站时 Import mysite Data 并查看我的 Apache 日志 我看到 99 XXX XXX XXX 22 May 2011 19 36 28 0200 GET HTTP 1 1 2
  • 在 Mathematica 中查找先前定义的消息

    Mathematica 默认定义了许多有用的消息来表示常见错误 例如使用错误数量的参数调用函数或未找到文件 一般来说 我更喜欢尽可能使用现有的 已定义的消息 因为这样可以更轻松地通过诸如Check Quiet and On Off 然而 我
  • 解决电力塔

    a 2 Power 10 6 10 9 3 Power 4 9 7 5 TwoTower n Nest 2 1 n 最小的是什么n这样TwoTower n gt a This question http www quora com How
  • 如何在数学中为给定旋转轴的 3D 绘图制作动画

    如果给定标准化旋转轴 例如 1 Sqrt 3 1 Sqrt 3 1 Sqrt 3 和 3d 图 例如 z x y Exp Sqrt x 2 y 2 Power 4 3 1 Power 4 3 1 Sqrt 1 2 Sqrt x 2 y 2
  • Mathematica 中的分类树实现

    我想使用以下方法实现简单的分类树 二元分类 数学 我怎样才能实现二叉树数学 有这样做的符号吗 我想说这取决于你想用数据结构做什么 您可以利用 Mathematica 表达式本身就是树的事实 如果只有叶节点相关 则使用嵌套列表 例如 1 2
  • NDS 求解波动方程时的不稳定性

    我正在尝试使用NDSolve求解波动方程 以检查使用它是否比我的旧特征方程更容易和 或更快 方法实施 我得到了很多特征方法没有得到的不稳定性 并且由于这些是简单的方程 我想知道出了什么问题 希望不是问题的物理方面 ans Flatten N
  • R 中从右到左的运算符结合性可能吗?

    我是 R 新手 我刚刚发现我患有支架恐惧症 https mathematica stackexchange com a 17315 2266 请参阅链接中的评论 我喜欢这种方式magrittr符号 gt 有效 因为它在某些情况下避免了嵌套括
  • Mathematica 作业中不需要的评估:为什么会发生这种情况以及如何在包加载过程中对其进行调试?

    我正在开发一个 大 包 它不再正确加载 这是在我更改一行代码后发生的 当我尝试加载包 需要 时 包开始加载 然后 setdelayed 定义之一 活跃起来 即以某种方式进行评估 被困在之前加载几行的错误捕获例程中 并且包加载中止 使用 ab
  • 自定义后缀表示法,应用/函数

    我想在 Mathematica 7 中设置以下自定义符号 这种表示法本身并不是特别有用 因此请不要建议现有的替代方案 或指出这只会节省一些击键次数 我想知道是否可以以及如何完成 目前 可以进入 f 2 2 3 f a b c Out b a

随机推荐

  • 如何在Python程序中嵌入Google Speech to Text API? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个项目 在其中创建了客户端和主机之间的聊天程序 并且我必须在其中嵌入语音到文本 有什么方法可以在
  • 将毫秒时间戳解析为 R 中的时间

    我以前曾问过这个问题 但我找不到确切的答案 如果我有一个代表自午夜以来的毫秒数的数字 例如 34200577 我如何将其转换为 R 时间 在午夜构造一个 基线时间 添加给定的毫秒一旦转换为秒并解释为时间 R gt as POSIXct as
  • data.table 逐行求和、平均值、最小值、最大值,如 dplyr?

    还有其他关于数据表上的行式运算符的帖子 他们要么是太简单 https stackoverflow com questions 7885147 efficient row wise operations on a data table或解决一
  • 找到具有公共键的哈希数组的最大值?

    我有两个数组 每个数组包含任意数量的具有相同键但不同值的哈希值 ArrayA value abcd value length 4 type 0 value abcdefgh value length 8 type 1 ArrayB valu
  • 在 Kotlin 中将 Dp 转换为 Px - 这种转换永远不会成功

    我在使用 Kotlin 编码时遇到了问题 我复制粘贴了一个java代码示例 https stackoverflow com a 9685690 6818446将 DP 转换为像素 以便将其作为以编程方式设置填充的参数 我原本期望 IDE 能
  • 在 VIM 中缩进文件夹中的所有文件

    我有一个包含数百个 TTL TeraTermLanguage 文件的文件夹 现在我想缩进所有这些文件 我已经创建了用于缩进的 teraterm vim 并使用 VIM 打开一个文件并执行 gg G 整个文件得到了正确的缩进 但是有什么方法可
  • 如何判断一个点是否属于某条线?

    如何判断一个点是否属于某条线 如果可能的话 示例值得赞赏 在最简单的形式中 只需将坐标代入直线方程并检查是否相等 Given Point p X 4 Y 5 Line l Slope 1 YIntersect 1 代入 X 和 Y Y Sl
  • Rails 3.2.6 中的延迟加载

    我在网上找到了一些资源 而不是在做类似的事情时 cars Car where colour gt black 查询不会执行 直到您执行以下操作 cars each c puts c name 但是 在我的 Rails 3 2 6 项目中 当
  • 找不到文件“obj\Debug\OldProjectName.csproj.FileListAbsolute.txt”

    我正在尝试发布项目 工具 vs2010 但无法始终收到以下错误 我从另一个项目粘贴到我的项目文件 然后将命名空间 OldProjectName 更改为父项目 NewProjectName 但它仍然从某个地方获取有关旧项目的信息 我清理了解决
  • 在 iOS 框架中嵌入框架

    我有一个包含另一个目标 框架 的项目 它是主项目的依赖项 该框架需要它自己的框架 因此我使用 carthage 添加了它们 该项目在模拟器上编译并运行良好 但是在物理设备上运行时出现以下错误 dyld Library not loaded
  • Errno::EIO:输入/输出错误 -

    class FaxFetchWorker include Sidekiq Worker sidekiq options retry gt false def perform job id 0 logger warn perform is i
  • djangonic 处理 rdf 的方法?

    我正在寻找 django 的 RDF 项目 但找不到任何活动的项目 这似乎是一个不错的http code google com p django rdf http code google com p django rdf 但最后一次提交是在
  • 如何比较具有复合主键的 2 个表中的行?

    这是场景 我有两张数据表 一张是2009年版本 一张是2010年版本 每个表的主键都是复合键 我知道每一行都有不同的行数 我需要找出差异 通常 在 正常 主键设置中 我只会查找不在其他表的主键列表中的主键值 但我不知道如何使用复合主键来做到
  • 从 Facebook 页面提取 RSS 源

    我需要帮助从 Facebook 页面提取 RSS 提要我正在使用以下代码 但它一直给我一个错误 string url https www facebook com feeds page php id 40796308305 format r
  • 当转义引号存在时,在外部引号或外部方括号中分割逗号

    是否可以按照以下条件拆分字符串 用 即逗号 分隔 在每个元素上 忽略第一个 和最后一个 内的逗号检查 在每个元素上 忽略第一个 和最后一个 内的逗号检查 e g String source to char DATE YYYY MM DD I
  • AVX512 掩码寄存器(k1...k7)的 GNU C 内联 asm 输入约束?

    AVX512 为其算术命令引入了 opmask 功能 一个简单的例子 上帝螺栓 org https godbolt org z P7xWD8 include
  • TaskSchedulerImpl:初始作业尚未接受任何资源;

    这就是我正在尝试做的事情 我创建了DataStax企业集群的两个节点 在其上创建了一个java程序来获取一张表 Cassandra数据库表 的计数 该程序是在 eclipse 中构建的 实际上是来自 windows 盒子 从 Windows
  • JavaScript 调用函数

    我最近一直在测试一些代码 试图更好地理解 javascript 然后我遇到了call 我无法很好地理解的功能 我有以下代码 function hi console log hi var bye function param param2 c
  • 编写值包装类的最佳方法

    假设我需要编写一个类来充当值的包装器 template
  • 将模块定义为 Manipulate 表达式的一部分与在初始化部分中定义有任何性能问题吗?

    我想问是否有人知道任何问题 性能或其他 如果要定义 放置 Manipulate 表达式使用的模块 就在 Manipulate 表达式本身内部 而不是在初始化部分 通常是在哪里完成的 两种方法都有效 但是当涉及到从模块直接访问 Manipul