美好的一天,
我说,我有一些非常懒散和复杂的功能f[x,y].我需要详细ContourPlot介绍它.此外,f[x,y]由于缺乏物理内存,该功能有时会失败.在这种情况下,我必须自己停止评估并调查点{x,y}的问题情况.然后我应该将元素{x,y,f [x,y]}添加到计算值列表f[x,y](比如"缓存")并重新开始评估ContourPlot.ContourPlot必须f从缓存中获取所有已计算的值.我宁愿将这样的列表存储在某个文件中,以便以后能够重用它.并且手动向该文件添加有问题的点可能更简单.
如果计算值列表f可能包含10000-50000个点,那么实现此方法的最快方法是什么?
List[]从List不同级别的表达式中出现的所有s中删除所有空对象的最有效方法是什么?List[]只有当它是另一个List自身的元素时才应该删除空.
在Web上找到的大多数PDF文件都有压缩和不可读的数据流.是否可以使用Acrobat或Acrobat Distiller解压缩PDF文件的内部内容,允许我们通过文本编辑器读取源代码?
PS这个问题的灵感来自于这个答案,它解释了如何使用GhostScript.
假设我有一个Symbols 的名字列表:
f1 := Print["f1 is evaluated!"];
list = {"f1", "f2"};
Run Code Online (Sandbox Code Playgroud)
以明显的方式Block,这些Symbol小号导致他们的评价:
In[19]:= With[{list=Symbol/@list},Block[list,f1//ToString]]
During evaluation of In[19]:= f1 is evaluated!
During evaluation of In[19]:= f1 is evaluated!
Out[19]= Null
Run Code Online (Sandbox Code Playgroud)
但是如果没有评估我们就可以Block毫无问题
In[20]:= Block[{f1, f2}, f1 // ToString]
Out[20]= "f1"
Run Code Online (Sandbox Code Playgroud)
是否可以在Block不评估Symbols的情况下将此列表注入范围?
在Mathematica中总有几种方法可以做同样的事情.例如,当我使用Condition WReach的解决方案来解决我最近遇到的问题时:
ClearAll[ff];
SetAttributes[ff, HoldAllComplete];
ff[expr_] /; (Unset[done]; True) :=
Internal`WithLocalSettings[Null, done = f[expr],
AbortProtect[If[! ValueQ[done], Print["Interrupt!"]]; Unset[done]]]
Run Code Online (Sandbox Code Playgroud)
但是,我们可以做同样的事情Block:
ClearAll[ff];
SetAttributes[ff, HoldAllComplete];
ff[expr_] :=
Block[{done},
Internal`WithLocalSettings[Null, done = f[expr],
AbortProtect[If[! ValueQ[done], Print["Interrupt!"]]]]]
Run Code Online (Sandbox Code Playgroud)
或者Module:
ClearAll[ff];
SetAttributes[ff, HoldAllComplete];
ff[expr_] :=
Module[{done},
Internal`WithLocalSettings[Null, done = f[expr],
AbortProtect[If[! ValueQ[done], Print["Interrupt!"]]]]]
Run Code Online (Sandbox Code Playgroud)
可能还有其他几种方法可以做到这一点.从内存和CPU使用的角度来看哪种方式最有效(f可能返回非常大的数据数组 - 但可能返回非常小)?
我刚刚发现这样的MathLink函数,LinkWrite并且LinkRead具有类似于它自己的内部的东西CheckAbort,可以吸收任何中止,并且不会进一步传播它们.
这可以很容易地显示LinkRead:
link = LinkLaunch[First[$CommandLine] <> " -mathlink"];
LinkRead[link];
LinkWrite[link, Unevaluated[Pause[10]]];
{LinkRead[link], Print["!!"]}
Run Code Online (Sandbox Code Playgroud)
在评估上面的代码后按Alt+ .,您将得到以下输出:
During evaluation of In[6]:= !!
Out[9]= {ReturnPacket[$Aborted], Null}
Run Code Online (Sandbox Code Playgroud)
如你所见,中止被吸收了LinkRead.
我的问题是它打破了我自己的评估流量控制CheckAbort.
有没有办法拦截将中止这种功能被吸收LinkRead和LinkWrite?
我最近了解到,Export在数学默认使用的"Printout"画面风格的环境,而不是"Working"导出为PDF时.它有时会导致FontSize生成的PDF中的波动非常烦人.
试试例子:
Show[First@ImportString[ExportString[Style[T, 100], "PDF"], "PDF"],
Prolog -> Inset[Style[T, 100], FormatType -> StandardForm]]
Show[First@ImportString[ExportString[Style[T, 100], "PDF"], "PDF"],
Prolog ->
Inset[Style[T, 100, Magnification -> .8],
FormatType -> StandardForm]]
Run Code Online (Sandbox Code Playgroud)

您可以看到导出的"T"具有笔记本中出现的"T"大小的80%.这是"Printout"默认情况下调整环境的方式.
有没有办法强制Export使用默认"Working"环境?
PS由于某些原因,Magnification->1为"打印输出"环境设置私有样式表不会影响Export.
好吧,想象一下我有这个矩阵:{{1,2},{2,3}},而我宁愿拥有{{4,1,2},{5,2,3}}.也就是说,我在列中添加了一列.有一个简单的方法吗?
我最好的建议是:
PrependColumn[vector_List, matrix_List] :=
Outer[Prepend[#1, #2] &, matrix, vector, 1]
Run Code Online (Sandbox Code Playgroud)
但它会混淆代码并不断需要加载越来越多的代码.这不是以某种方式建造的吗?
我需要一种算法将HCL颜色转换为RGB,然后将RGB转换为HCL,同时要记住这些颜色空间具有不同的色域(我需要将HCL颜色约束为可以在RGB颜色空间中再现的颜色).算法是什么(该算法旨在在Wolfram Mathematica中实现,仅支持原生RGB颜色)?我没有使用色彩空间的经验.
PS一些关于HCL颜色的文章:
M. Sarifuddin(2005年).一种新的感知统一色彩空间,具有相关的颜色相似性度量,用于基于内容的图像和视频检索.
Zeileis,Hornik和Murrell(2009年):逃离RGBland:为统计图形选择颜色//计算统计和数据分析第53卷,第9期,2009年7月1日,第3259-3270页
更新: 正如Jonathan Jansson所指出的,在上述两篇文章中,不同的颜色空间用名称"HCL"描述:"第二篇文章使用L C h(uv),它与L u v*相同,但在极地中描述coordiates其中h(uv)是u*和v*坐标的角度,C*是该向量的大小".所以实际上我需要一种算法将RGB转换为L u v*并向后转换.
在Equal我们阅读的文档页面上
如果机器精度或更高的近似数字最多与它们的最后七位二进制数字(大致是它们的最后两位小数位)不同,则认为它们是相等的.
以下是示例(32位系统;对于64位系统,在中间添加一些零):
In[1]:= 1.0000000000000021 == 1.0000000000000022
1.0000000000000021 === 1.0000000000000022
Out[1]= True
Out[2]= True
Run Code Online (Sandbox Code Playgroud)
我想知道Mathematica中的Equal函数的"正常"模拟是否会丢弃最后7个二进制数字?