Mathematica提高运算速度的几种方法

Mathematica提高运算速度的几种方法

看到一篇很好的文章,关于提高mma运算速度的,拿出来,讲一下我觉得重要的

这里也是转载翻译的
下面这个是原文

文章里一共有十点,我在自己电脑上试了一下,讲一下我试下来觉得好用的

1. 尽早使用机器精度 不要使用分数运算  在数字后面加

使用N[],或则xx.都是可以的
Det[Table[1/(1. + Abs[i - j]), {i, 1, 150}, {j, 1, 150}]]; // AbsoluteTiming
Det[Table[1/(1 + Abs[i - j]), {i, 1, 150}, {j, 1, 150}]]; // AbsoluteTiming
上面的两个例子,第一个是使用了机器精度
看一下效果
可以看到使用了机器精度之后效率高了很多

并且,这么做还是可以节省内存的
data = RandomReal[1, {100}];
ByteCount[Append[data, 4]]
ByteCount[Append[data, 4.]]
可以看到在使用了机器精度后节约了大概一半的内存

2. 使用Compile
arg = Range[-50., 50, 0.25];
fn = Function[{x},
   Block[{sum = 1.0, inc = 1.0},
    Do[inc = inc*x/i; sum = sum + inc, {i, 10000}]; sum]];
Map[fn, arg]; // AbsoluteTiming
和下面使用了Compile
fn = Compile[{x},
   Block[{sum = 1.0, inc = 1.0},
    Do[inc = inc*x/i; sum = sum + inc, {i, 10000}]; sum]];
Map[fn, arg]; // AbsoluteTiming
可以看到时间变少了

在Compile里面还可以加上并行运算
fn = Compile[{x},
   Block[{sum = 1.0, inc = 1.0},
    Do[inc = inc*x/i; sum = sum + inc, {i, 10000}]; sum], 
   RuntimeAttributes -> {Listable}, Parallelization -> True];


3.使用Block代替Module

<span style="color:#000000;background-color: rgb(255, 255, 255);">Do[Module[{x = 2}, 1/x], {10000}]; // AbsoluteTiming
Do[Block[{x = 2}, 1/x], {10000}]; // AbsoluteTiming</span>
同样的两行代码,运算速度是不一样的



最后多使用并行计算也是提高速度的一种办法
*****
Parallelize[]
*****
就是上面那个函数了

我这里大概就讲这么多,在上面两个链接里还有更加详细的介绍

以上,所有

2016/9/29

posted on 2016-09-29 20:23  WMN7Q  阅读(1317)  评论(0编辑  收藏  举报

导航