Mathematica 循环计算效率

这两天帮欧洲的研究小组处理试验数据,就是计算试验数据的 Radial Distribution Funciton (RDF),发现50,000个数据点,用Mathematica处理起来非常吃力。已经开始用C++写程序了,后来尝试另一种方法,找到的计算时间上的差异。

问题定义:列举寻找N个点之间的距离。实现方法有两种,计算复杂度都是 O(N^2)。Mathematica里可以用两种方法实现:(1)利用Subset函数罗列2个点的组合,然后计算距离(Euclidean Distance);(2)利用循环。程序如下:

NumG = 500; Data = RandomReal[1, {NumG, 3}];
(* Method 1: Use Mathematica in-build function *)
DistDistance = {};
Timing[DistDistance = EuclideanDistance @@@ Subsets[Data, {2}];][[1]]
(* Method 2: Use loops *)
DistDistance = {};
Timing[For[i = 2, i <= NumG, i++,
For[j = 1, j <= i - 1, j++, {dx = Norm[Data[[i]] - Data[[j]]]; AppendTo[DistDistance, dx];
}]];][[1]]

测试程序里,都用了500个随机点。前一种是抽象语言,实现时间大概是0.128秒*;而后者属于底端的循环定义,尽然用了44.9秒!而且前者与数据点数量符合O(N^2),后者在1000个点以上就根本无法处理了。

看来以后用Mathematica还是要多使用程序里的函数形式。

 

*硬件环境,MacBook Pro 2014。

[补注] 这个看来是和内存利用相关的。第二种方法采用了AppendTo 函数,在每个循环里都在进行内存的读写。尺寸大的算例里,内存可以用到10G以上。计算程序已经优化。

[补补注] 需要提高计算效率,可以采用几种不同的函数定义方式。上文提到的方法,其中输入函数,并没有确定数据类型。这个其实是Mathematica的优点之一。但是要进行循环计算的时候,就反倒有效率上劣势。其解决方法是换用函数定义方法。下面是几个实测的算例,都是 10^7 次循环。

定义一,函数定义采用 ":=",或者"Function[]",计算时间在70秒左右; 

定义二,采用 Compile[],需要预先定义函数类型,计算时间10秒左右;

定义三,采用 Compile[],类似定义二,但是在最后制定编译类型,CompilationTarget->"C"。计算时间3.5秒。定义入下图。

发布在科学工作 | 已有标签 | 2 个回复或互链

几个在线 LaTeX 编辑平台

由于合作者比较多,但是个人又喜欢LaTeX的风格,寻找拥有类似Google Docs的合作写作 (collaborative writing) 的平台。下面的几个关注了很久,都有收费的服务。支持多用户,协同编辑文档。

(1) Auhtorea: https://www.authorea.com/

(2) ShareLaTeX: https://www.sharelatex.com/

(3) writeLaTeX: https://www.overleaf.com/

和传统LaTeX编辑比较,这些服务都可以用浏览器编辑和预览,也就是说也适用于移动设备。文档都是云存储。可以协作编辑文档,有利于合作。这些服务还有一个好处就是,输出文档不一定是基于LaTeX的,也可以转换成别的格式,例如 MultiMarkdown 之类。现在关于未来Publishing的形式也是有不少的讨论。例如论文的出版,不仅仅限于打印版本,而更多的是应该基于网页的可读性。

由于最后还是商业模式运作,所以每个网站都弄出一堆不同的定价模式,每月的价格大都在10到20美元之间。

现在的需求是,有一个团队的空间,每个人都可以创建自己的文档,并且邀请合作者共同编辑。这个有点像具有 Project Management 特性的文档写作和编辑空间。估计是提的要求太多了,所以到现在还没有找到一个合适的工具。

发布在LaTeX/论文 | 已有标签 , , , | 发表评论

一个关于数学软件的问答 (Q&A)

这个是一个在StackExchange 论坛上的问答 Q&A,关于Mathematica。问题十分简单,哪里去找学这个数学软件的资源。看看下面的回复,简直就是可以写出一本书的内容。不对,那信息量比一本,甚至一系列教程多得多得多得多得多(注意,这个不是口吃)

Really good collection of resources for learning Mathematica, via goo.gl/OBVrcm

主要的是,这个回答(或者说回答系列)的详细程度,回答者的专业程度,让人叹为观止。另外就是可以看到社区的重要性,应该也是这些回答者们帮助他人的动力。这样的网络讨论,应该说是在英文社区中比较多见。

发布在科学工作 | 已有标签 , , | 发表评论

如果我是中国大学校长。。。

这个像是一个小学/中学的命题作文。

但我这里写的是一件小事,就是“如果我是中国大学校长”,我会斥资重建大学校园里的所有的厕所。

当年,听一个法国同事说过,一个法国知名社会学家计划全家搬到桂林一家大学里,打算未来十年在中国大陆发展。结果来了三个月,全家就都又搬回到法国去了。主要的原因倒不是水土不服,文化差异,或者学术文化的不同,根本的理由是他难以接受大学里的厕所。。。

最近几次回国发现,几家大学校园里(除了最近新建的楼房),厕所的水平果然是有问题。还有就是异味难除,结果弄的楼道里面都是一股味道。这次参观了一大学科学馆,设备齐全,研究水平也是一流,结果实验室那层楼的厕所弄的,满楼飘“香”。

所以,基于以上的观察,如果我是中国大学校长,我会说,所谓世界性大学的建设,我看还是要从厕所开始。

发布在杂七杂八 | 已有标签 , , | 发表评论

墙内

回到国内,经过多次测试发现:没有办法直接在Chrome地址栏里直接用Google搜索,无法舒畅地使用GMail,无法用Google Scholar查询学术文章。每次要这么做,还需要打开一下大学的VPN服务,而这个大学的服务也不是那么稳定。

不过,发现奇特的一点是,如果用国际漫游(Internet Roaming)的手机上网,几乎没有任何障碍。可以顺畅地访问和使用 twitter,facebook,dropbox,gmail。这是个奇怪的问题,所谓漫游,都是使用中国联通的网络(China Unicom),显然通讯数据都是需要穿过网络防火墙的。那么内部的手机用户的数据是经过过滤的,但是国外手机借本地网络就可以没有过滤。

当然对个人来说,这是好事。

只不过,这样不同的处理对待,难道是因为国外手机运营商和中国联通的协议?也就是所谓的“有钱能使鬼推磨”?个人感觉是一个特意留下的空档。所谓的“一国两治”。

发布在随感随想 | 已有标签 , , | 1 个回复或互链
  • 信息