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

转载于:https://www.cnblogs.com/wmn7q/p/7265559.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值