在32位操作系统下,分配给任何一个程序的最大内存有限,Mathematica优雅地终止内核并返回最大内存分配错误.
然而,在64位操作系统上,Mathematica将自由使用所有可用内存并使系统停止运行.因此,限制内存使用的正确方法是什么?可以使用MemoryConstrained组合$Pre或CellEvaluationFunction但我不想为此目的绑定其中任何一个,或者必须修改现有用途以合并此功能.
是否存在另一种全局限制内存使用的方法,例如内核标志或系统$ Option?
简单的问题,给出这样的列表
Clear[a, b, c, d, e, f];
lst = {{a, b}, {c, d}, {e, f}};
Run Code Online (Sandbox Code Playgroud)
并假设我有一个这样定义的函数:
foo[x_,y_]:=Module[{},...]
Run Code Online (Sandbox Code Playgroud)
我想将此功能应用于列表,所以如果我输入
Map[foo, lst]
Run Code Online (Sandbox Code Playgroud)
这给了
{foo[{a, b}], foo[{c, d}], foo[{e, f}]}
Run Code Online (Sandbox Code Playgroud)
我想要它出来
{foo[a, b], foo[c, d], foo[e, f]}
Run Code Online (Sandbox Code Playgroud)
所以它有效.
做这个的最好方式是什么?假设我无法修改函数foo []定义(假设它是内置函数)
我现在只知道两种方式
Map[foo[#[[1]], #[[2]]] &, lst]
{foo[a, b], foo[c, d], foo[e, f]}
Run Code Online (Sandbox Code Playgroud)
(太多的工作),或
MapThread[foo, Transpose[lst]]
{foo[a, b], foo[c, d], foo[e, f]}
Run Code Online (Sandbox Code Playgroud)
(减少输入,但需要先转置)
问题:还有其他更好的方法吗?我看了看其他地图和它的朋友,我看不到比我拥有的更直接的功能.
例如,我在mathematica中有一对值列表List= {{3,1},{5,4}}.
如果第二个元素未达到阈值,如何更改第一个元素(3和5).例如,如果第二部分低于2,那么我希望第一部分变为零.所以列表然后= {{0,1},{5,4}}.其中一些列表非常长,所以不幸的是,手动执行它不是一个选项.