标签: wolfram-mathematica

Mathematica:如何清除符号的缓存,即Unset pattern-free DownValues

我是一个糟糕的人:有时,当没有人在观看时,我会缓存结果而不包括完整的上下文,如下所示:

f[x_]:=f[x]=x+a;
a=2; f[1];
DownValues[f]

Out[2]= {HoldPattern[f[1]]:>3,HoldPattern[f[x_]]:>(f[x]=x+a)}
Run Code Online (Sandbox Code Playgroud)

这会导致可怕的细微错误,更重要的是,当我更改上下文时需要清除缓存.清除缓存的一种方法是完全Clear符号并重复定义,但这不是一个真正的解决方案.

我真正想要的是一种清除与符号相关的所有无模式DownValues的方法.
为清楚起见,我将把我目前的解决方案作为答案包括在内,但如果两个方面都失败了

  • 它只使用全数字参数清除DownValues
  • 出于美学原因,我想避免使用Block抓住DownValues.

关于如何改进的任何想法ClearCache

wolfram-mathematica

22
推荐指数
3
解决办法
1640
查看次数

在Mathematica中绘制复杂函数

如何创建一个Mathematica图形来复制sage 中complex_plot的行为?即

...获取一个变量的复杂函数,并在指定的xrange和yrange上绘制函数的输出,如下所示.输出的大小由亮度表示(零为黑色,无穷大为白色),而参数由色调表示(红色为正实,红色增加,黄色,......随着参数增加) .

这是zeta函数的一个例子(从中性漂移的M.Hilton那里偷来的),其覆盖的绝对值轮廓:

zeta函数complex_plot

在数学文档页面功能复杂的变量,它说,你可以使用可视化复杂的功能ContourPlotDensityPlot"潜在的阶段着色".但问题在于两种类型的图,ColorFunction只需要一个等于该点的轮廓或密度的变量 - 所以在绘制绝对值时,似乎不可能使相位/参数着色.请注意,这不是传递Plot3D所有3个参数的问题.(x,y,z)ColorFunction

我知道还有其他方法来可视化复杂的功能 - 例如Plot3D文档中的"简洁示例" ,但这不是我想要的.

此外,我确实有一个解决方案(实际上已经用于生成维基百科中使用的一些图形),但它定义了一个相当低级别的功能,我认为应该可以使用像ContourPlot或的高级函数DensityPlot.并不是说这应该阻止你提供你最喜欢的方法,使用较低级别的结构!


编辑: Michael Trott在Mathematica杂志上发表了一些很好的文章:
可视化代数函数的黎曼曲面,IIa,IIb,IIc,IId.
可视化黎曼曲面演示.
黎曼曲面的返回(Mma v6的更新)

当然,Michael Trott编写了Mathematica指南书,其中包含许多漂亮的图形,但似乎已经落后于加速的Mathematica发布时间表!

plot visualization wolfram-mathematica complex-numbers

22
推荐指数
3
解决办法
2万
查看次数

将符号公开给$ ContextPath

有多种的Internal`情况下的功能是有用的,如InheritedBlock,BagStuffBag等,以及许多有用Developer`的功能.

我希望公开这些符号的选择,以便可以在没有上下文名称的情况下明确地解决它们,但我不想通过添加Internal`Developer`来公开所有这些符号$ContextPath.

我可以使用代理符号,Bag = Internal`Bag但这既不干净也不完全正确,因为它是一个引用,例如属性不会被继承.

有没有办法有选择地暴露我想要的符号,而不是诉诸上面的kluge?

symbols wolfram-mathematica contextpath

22
推荐指数
2
解决办法
761
查看次数

OpenCV中的图像转换

这个问题与这个问题有关: How to remove convexity defects in sudoku square

我是想实现nikie's answerMathematica to OpenCV-Python.但我陷入了程序的最后一步.

即我得到了正方形的所有交叉点,如下所示:

在此输入图像描述

现在,我想将其转换为一个完美的大小正方形(450,450),如下所示:

在此输入图像描述

(不要介意两个图像的亮度差异).

问题: 如何在OpenCV-Python中执行此操作?我正在使用cv2版本.

python opencv wolfram-mathematica computer-vision

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

在Mathematica中分析内存使用情况

除了为他们的Eclipse插件(mathematica workbench,iirc)支付$$$之外,有没有办法分析mathkernel内存使用情况(下至个别变量)?

现在我完成了一个占用多GB GB的程序的执行,但是存储的唯一东西最多应该是〜50MB的数据,但是mathkernel.exe往往保持在~1.5GB(基本上,就像Windows一样多给它).有没有更好的方法来解决这个问题,除了保存我需要的数据并每次退出内核?

编辑:我刚刚了解了ByteCount函数(它显示了基本数据类型的一些令人不安的结果,但除此之外),但即使是我所有变量的总和也远不及mathkernel所采用的数量.是什么赋予了?

profiling memory-management wolfram-mathematica

21
推荐指数
2
解决办法
3191
查看次数

Mathematica中地块的标准颜色是什么?

(注意:此问题的所有答案均适用于版本10之前的Mathematica版本.对于版本10及更高版本,请参阅https://mathematica.stackexchange.com/questions/54486/how-to-access-new-colour- scheme-in-version-10https://mathematica.stackexchange.com/questions/54629/what-are-the-standard-colors-for-plots-in-mathematica-10.)

Mathematica中使用PlotListPlot命令时,会选择某些默认颜色.

出于某些报告中的一致性原因,我想将它们与PlotStyle选项一起使用.事实证明,我无法使用预定义的颜色名称重现默认颜色,尽管蓝色和紫色似乎在某种程度上接近.

因此我的问题是:

如何选择Mathematica在绘图中使用的标准颜色以及PlotStyle?

先感谢您.

belisariusSjoerd给出了很好的答案,我们可以从中得出结论

绘图[Sin [x],{x,0,2 Pi},PlotStyle - > ColorData [1,4]]

将导致以第四种标准颜色绘制的正弦值,一些漂亮的绿色.

plot wolfram-mathematica

21
推荐指数
3
解决办法
2万
查看次数

使用mathematica导入大文件/数组

我在Windows7 32位平台上使用mathematica 8.0.1.0.我尝试导入数据

Import[file,”Table”]
Run Code Online (Sandbox Code Playgroud)

只要文件(文件中的数组)足够小,它就可以正常工作.但是对于更大的文件(38MB)/阵列(9429乘2052),我得到的信息是:

No more memory available. Mathematica kernel has shut down. Try quitting other applications and then retry.
Run Code Online (Sandbox Code Playgroud)

在具有更多主内存的Windows7 64位平台上,我可以导入更大的文件,但我认为有一天,当文件增长/数组有更多行时,我会遇到同样的问题.

所以,我试图找到一个导入大文件的解决方案.在搜索了一段时间之后,我在这里看到了一个类似的问题:处理Wolfram Mathematica中的大数据文件的方法.但似乎我的mathematica知识不足以使建议的OpenRead,ReadList或类似的数据适应我的数据(参见这里的示例文件).问题是我需要文件中数组的其余程序信息,例如某些列和行中的Dimensions,Max/Min,我正在对某些列和每一行进行操作.但是当我使用例如ReadList时,我从来没有得到与我使用Import相同的数组信息(可能是因为我以错误的方式进行).

有人可以给我一些建议吗?我很感激每一个支持!

wolfram-mathematica

21
推荐指数
1
解决办法
7448
查看次数

正确的方法来限制Mathematica内存的使用?

在32位操作系统下,分配给任何一个程序的最大内存有限,Mathematica优雅地终止内核并返回最大内存分配错误.

然而,在64位操作系统上,Mathematica将自由使用所有可用内存并使系统停止运行.因此,限制内存使用的正确方法是什么?可以使用MemoryConstrained组合$PreCellEvaluationFunction但我不想为此目的绑定其中任何一个,或者必须修改现有用途以合并此功能.

是否存在另一种全局限制内存使用的方法,例如内核标志或系统$ Option?

memory wolfram-mathematica allocation cap

21
推荐指数
1
解决办法
2540
查看次数

如何创建选项卡式Mathematica笔记本

有没有办法在选项卡式界面中创建和编辑笔记本(单元序列)?这样的界面可以用TabView其他工具制作吗?我认为如果我从头开始制作前端,这是可能的,但在标准的Wolfram前端中有没有办法?


有两件事激励我提出这个问题.首先,我想用Mathematica笔记本创建Microsoft Office OneNote的替代品.其次,当我在Mathematica工作时,我发现自己想知道选项卡界面是否比打开多个单独的窗口更好.

user-interface wolfram-mathematica mathematica-frontend

21
推荐指数
1
解决办法
2207
查看次数

R中从右到左的操作员关联性可能吗?

我是R的新手,我刚刚发现我患有Bracket Phobia(请参阅链接中的评论).我喜欢magrittr表示法的%>%工作方式,因为它在某些情况下避免了嵌套的括号,并使代码更具可读性.我来自Mathematica哪里,有一个非常相似的原生//符号来做什么%>%.以下是一些R和Mathematica比较:

#R Notation    
c(1.5,-2.3,3.4) %>% round %>% abs %>% sum  
Run Code Online (Sandbox Code Playgroud)

#Mathematica Notation
{1.5,-2.3,3.4}//Round//Abs//Total
Run Code Online (Sandbox Code Playgroud)

到目前为止很好,但是,我的问题是:

有没有办法模仿Mathematica @ notation,从右到左的关联性R

以下是它在Mathematica中的工作原理,以解决上面相同的代码:

Total@Abs@Round@{1.5,-2.3,3.4}
Run Code Online (Sandbox Code Playgroud)

在Mathematica中,它也可以写成:

Total[Abs[Round[{1.5,-2.3,3.4}]]]
Run Code Online (Sandbox Code Playgroud)

就像R它会是:

sum(abs(round(c(1.5,-2.3,3.4))))
Run Code Online (Sandbox Code Playgroud)

但是在这样的事情中会更加干净(而且很酷)R:

sum@abs@round@c(1.5,-2.3,3.4)
Run Code Online (Sandbox Code Playgroud)

PS:我知道@用于S4课程,并不是一个好主意.这只是一个说明性的比较.

wolfram-mathematica r associativity magrittr

21
推荐指数
3
解决办法
523
查看次数