小编Ale*_*kov的帖子

构造具有内存的函数的最佳方法

美好的一天,

我说,我有一些非常懒散和复杂的功能f[x,y].我需要详细ContourPlot介绍它.此外,f[x,y]由于缺乏物理内存,该功能有时会失败.在这种情况下,我必须自己停止评估并调查点{x,y}的问题情况.然后我应该将元素{x,y,f [x,y]}添加到计算值列表f[x,y](比如"缓存")并重新开始评估ContourPlot.ContourPlot必须f从缓存中获取所有已计算的值.我宁愿将这样的列表存储在某个文件中,以便以后能够重用它.并且手动向该文件添加有问题的点可能更简单.

如果计算值列表f可能包含10000-50000个点,那么实现此方法的最快方法是什么?

wolfram-mathematica

19
推荐指数
2
解决办法
2503
查看次数

从列表中删除空列表的有效方法?

List[]List不同级别的表达式中出现的所有s中删除所有空对象的最有效方法是什么?List[]只有当它是另一个List自身的元素时才应该删除空.

wolfram-mathematica

16
推荐指数
1
解决办法
5613
查看次数

是否可以使用Adobe Acrobat或Acrobat Distiller解压缩PDF?

在Web上找到的大多数PDF文件都有压缩和不可读的数据流.是否可以使用Acrobat或Acrobat Distiller解压缩PDF文件的内部内容,允许我们通过文本编辑器读取源代码?

PS这个问题的灵感来自于这个答案,它解释了如何使用GhostScript.

pdf acrobat

15
推荐指数
3
解决办法
1万
查看次数

如何在不评估符号的情况下阻止符号?

假设我有一个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的情况下将此列表注入范围?

wolfram-mathematica

13
推荐指数
4
解决办法
1593
查看次数

条件,块,模块 - 哪种方式的内存和计算效率最高?

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可能返回非常大的数据数组 - 但可能返回非常小)?

wolfram-mathematica

13
推荐指数
1
解决办法
922
查看次数

MathLink函数中的CheckAbort?

我刚刚发现这样的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.

有没有办法拦截将中止这种功能被吸收LinkReadLinkWrite

wolfram-mathematica mathlink

12
推荐指数
1
解决办法
243
查看次数

如何在"工作"风格环境而不是"打印输出"中导出图形?

我最近了解到,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.

wolfram-mathematica mathematica-frontend

12
推荐指数
1
解决办法
1307
查看次数

如何将列添加到矩阵?

好吧,想象一下我有这个矩阵:{{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)

但它会混淆代码并不断需要加载越来越多的代码.这不是以某种方式建造的吗?

wolfram-mathematica matrix

11
推荐指数
3
解决办法
4135
查看次数

HCL颜色为RGB和后退

我需要一种算法将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*并向后转换.

algorithm wolfram-mathematica colors

11
推荐指数
5
解决办法
9629
查看次数

Mathematica中是否存在"正常"的EqualQ功能?

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个二进制数字?

wolfram-mathematica

10
推荐指数
5
解决办法
816
查看次数