相关疑难解决方法(0)

您的Mathematica工具包里有什么?

我们都知道Mathematica很棒,但它也经常缺乏关键功能.您在Mathematica中使用哪种外部包/工具/资源?

我将编辑(并邀请任何其他人也这样做)这个主要帖子包括专注于科学研究的一般适用性的资源,并且尽可能多的人会觉得有用.随意贡献任何东西,甚至是小代码片段(正如我在下面做的时间例程).

此外,在Mathematica 7及其他您发现自己,或从一些纸张/网站挖出的无证和有用的功能是非常受欢迎的.

请提供简短描述或评论为什么有什么好东西或它提供的实用程序.如果您使用会员链接链接到亚马逊上的书籍,请提及它,例如,在链接后面加上您的姓名.


包:

  1. LevelScheme是一个大大扩展Mathematica生产美观图的能力的软件包.我使用它,如果没有其他任何东西,那么对框架/轴刻度的大大改进控制.它的最新版本称为SciDraw,它将在今年的某个时候发布.
  2. David Park's Presentation Package(50美元 - 免费更新)
  3. Jeremy Michelson的grassmannOps软件包提供了使用Grassmann变量和具有非平凡换向关系的算子进行代数和微积分的资源.
  4. 约翰·布朗(John Brown)GrassmannAlgebra与格拉斯曼(Grassmann)和克利福德代数(Clifford algebras)合作的包和书.
  5. RISC(符号计算研究所)提供各种Mathematica(和其他语言)包可供下载.特别是,有自动定理证明的Theorema,以及Algorithmic Combinatorics小组软件页面中用于符号求和,差分方程等的多个包.

工具:

  1. MASH是Daniel Reeves出色的Perl脚本,主要为Mathematica v7提供脚本支持.(现在-script可以选择使用Mathematica 8制作.)
  2. 一个alternate Mathematica shell与GNU的readline输入(使用python,*nix中只)
  3. ColourMaths包允许您直观地选择表达式的各个部分并对其进行操作.http://www.dbaileyconsultancy.co.uk/colour_maths/colour_maths.html

资源:

  1. MathSource对于各种应用程序,Wolfram自己的存储库有很多有用的缩小笔记本.另请参阅其他部分,例如

  2. 数学维基教科书.

图书:

  1. Mathematica编程: Leonid Shifrin(web,pdf)的高级介绍是必读的,如果你想在Mathematica中做更多的For循环.我们很高兴在Leonid这里回答问题.
  2. 使用Mathematica量子方法作者:James …

resources wolfram-mathematica

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

时间有效的部分倒置索引构建

我需要建立一个局部的Inverted Index.就像是:

l = {{x, {h, a, b, c}}, {y, {c, d, e}}}
iI[l]
(*
-> {{a, {x}}, {b, {x}}, {c, {x, y}}, {d, {y}}, {e, {y}}, {h, {x}}}
*)
Run Code Online (Sandbox Code Playgroud)

我认为它的作用非常清楚.在输入列表中,{x,y ...}是唯一的,而{a,b,c,..}则不是.输出应该按顺序排序#[[1]].

现在,我这样做:

iI[list_List] := {#, list[[Position[list, #][[All, 1]]]][[All, 1]]} & /@ 
                     (Union@Flatten@Last@Transpose@list)
Run Code Online (Sandbox Code Playgroud)

但是对于这么简单的任务看起来太复杂了,看起来太慢了,我应该能够应付军团.

试驾比较你的结果:

words = DictionaryLookup[];
abWords = DictionaryLookup["ab" ~~ ___];
l = {#, RandomChoice[abWords, RandomInteger[{1, 30}]]} & /@ words[[1 ;; 3000]];
First@Timing@iI[l]
(*
-> 5.312
*)
Run Code Online (Sandbox Code Playgroud)

那么,加速的任何想法?

wolfram-mathematica

10
推荐指数
1
解决办法
261
查看次数

聚合Tally计数器

很多时候我发现自己计算出现的次数,Tally[ ]然后,一旦我放弃原始列表,必须添加(和加入)到该计数器列出来自另一个列表的结果.

这通常发生在我计算配置,事件,执行一些离散统计等时.

所以我为Tally聚合定义了一个非常简单但方便的函数:

aggTally[listUnTallied__List:{}, 
         listUnTallied1_List,
         listTallied_List] := 
 Join[Tally@Join[listUnTallied, listUnTallied1], listTallied] //. 
     {a___, {x_, p_}, b___, {x_, q_}, c___} -> {a, {x, p + q}, b, c};
Run Code Online (Sandbox Code Playgroud)

这样

l = {x, y, z}; lt = Tally@l;
n = {x};
m = {x, y, t};

aggTally[n, {}]
  {{x, 1}}

aggTally[m, n, {}]
  {{x, 2}, {y, 1}, {t, 1}}

aggTally[m, n, lt]
  {{x, 3}, {y, 2}, {t, 1}, {z, 1}}
Run Code Online (Sandbox Code Playgroud)

这个功能有两个问题:

1)表现

Timing[Fold[aggTally[Range@#2, #1] &, {}, Range[100]];]
  {23.656, Null}
(* …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

7
推荐指数
2
解决办法
430
查看次数

在mathematica中选择特定的符号定义(不是转换规则)

我有以下问题.

f[1]=1;
f[2]=2;
f[_]:=0;

dvs = DownValues[f];
Run Code Online (Sandbox Code Playgroud)

这给了

dvs = 
   {
      HoldPattern[f[1]] :> 1, 
      HoldPattern[f[2]] :> 2, 
      HoldPattern[f[_]] :> 0
   }
Run Code Online (Sandbox Code Playgroud)

我的问题是我想只提取f [1]和f [2]等的定义,而不是一般定义f [_],我不知道如何做到这一点.

我试过了,

Cases[dvs, HoldPattern[ f[_Integer] :> _ ]] (*)
Run Code Online (Sandbox Code Playgroud)

但它没有给我什么,即空列表.

有趣的是,将HoldPattern更改为临时^脚注

dvs1 = {temporary[1] :> 1, temporary[2] :> 2, temporary[_] :> 0}
Run Code Online (Sandbox Code Playgroud)

发行

Cases[dvs1, HoldPattern[temporary[_Integer] :> _]] 
Run Code Online (Sandbox Code Playgroud)

{temporary[1] :> 1, temporary[2] :> 2}
Run Code Online (Sandbox Code Playgroud)

它的工作原理.这意味着(*)几乎是一种解决方案.

我不明白为什么它适用于临时而不是HoldPattern?如何使用HoldPattern直接使其工作?

当然,问题是什么得到评估,什么不得等.在Mathematica编码时的以太问题.对于真正的大师来说......

最好的问候佐兰

脚注=我手动输入它作为替换"/ .HoldPattern - > temporary"实际上执行f [_]:= 0规则并给出一些奇怪的,我当然希望避免这种情况.

wolfram-mathematica

6
推荐指数
1
解决办法
234
查看次数

标签 统计

wolfram-mathematica ×4

resources ×1