相关疑难解决方法(0)

将列表应用于Mathematica中的参数

我如何将列表中的每个元素应用于函数中的每个参数?有点像Map,除了可变数量的参数.

因此,举例来说,如果我有一个功能action[x1_,x2_,x3_]:=...,我有一个名单{1,2,3},我将如何创建一个函数调用actionaction[1,2,3]

我希望这个函数能够处理我现在更改actionaction[x1_,x2],以及其他任何内容{1,2},以及现在调用操作action[1,2].

wolfram-mathematica

9
推荐指数
2
解决办法
4337
查看次数

内存使用Apply vs Map.虚拟内存使用和锁定

我需要在一长串对中找到所有数字对的总和.在Mathematica中有很多方法可以做到这一点,但我正考虑使用其中任何一个PlusTotal.由于Total在列表上工作,Map是在那里使用的函数式编程工具,Apply在级别1(@@@)是要使用的Plus,因为Plus要将数字作为参数添加.

这是一些演示代码(警告:在执行此操作之前保存所有工作!):

pairs = Tuples[Range[6000], {2}]; (* toy example *)

TimeConstrained[Plus @@@ pairs; // Timing, 30]

(* Out[4]= {21.73, Null} *)

Total /@ pairs; // Timing

(* Out[5]= {3.525, Null} *)
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到我已添加TimeConstrained到代码中Plus.这是我为你提供的保护措施,因为裸代码使我的PC几乎瘫痪.事实上,上面的代码对我有用,但如果我将第一行的范围增加到7000,我的计算机就会锁定并且永远不会回来.什么都行不通,没有alt-period,程序切换,ctrl-alt-delete,尝试使用任务栏启动进程管理器,关闭笔记本电脑盖让它睡觉等等,真的没什么.

问题是由Plus @@@ pairs线路的极端内存使用引起的.虽然'对'本身占用大约288 MB,而总数的一半,但Plus系列的计算速度很快消耗约7 GB.这是我的免费物理内存的结束,任何更大的内容都会导致在磁盘上使用虚拟内存.当使用虚拟内存时,Mathematica和/或Windows显然效果不佳(BTW,MacOS和Linux表现更好吗?).相反,Total行对内存使用情况图没有明显影响.

我有两个问题:

  1. 鉴于文档中所述的等价Plus和(Total[Total]列表相当于Apply [Plus,list].)如何解释行为的极端差异?我认为这与之间的差异做ApplyMap,但我很好奇,所涉及的内部机制.
  2. 我知道我可以通过使用来限制命令的内存占用MemoryConstrained,但是如果您怀疑Mathematica可能会占用您的所有系统资源,那么必须在任何地方使用它是一件痛苦的事.是否有一个全局设置可以告诉Mathematica仅为其所有操作使用物理内存(或者,最好是其中的某一部分)?这将是非常有帮助的,因为这种行为导致了过去几周的一些锁定,并且它真的开始惹恼我.

memory-management wolfram-mathematica

9
推荐指数
2
解决办法
909
查看次数