Quantcast
Channel: 数据科学中的R和Python
Viewing all articles
Browse latest Browse all 85

如何善用R的语法:三段示例

$
0
0
在改进R代码的运算效率时,我们常说的第一句话就是:要善用R的语法。那么问题是:HOW?下面用一个具体的问题来表达这句比较抽象的话。问题就是用R代码来模拟一个二维布朗运动,一个人从原点出发,随机的向任何一个方向前进或后退一步,不会停留在原地。这个问题是一位英国留学的朋友问我的,我觉得可能比较典型,就顺便写在博客上供大家参考比较吧。

下面就这个问题,给出了三个解答,slowwalk是运行最慢的,在我的电脑上大约要运算8秒,这段代码慢的原因在于用c来补进新的向量元素。而在R中,对一个向量进行新增的操作实际上是进行了复制重建,所以速度是很慢的。为了改进这一点,speedwalk1函数中,先用一个空向量占好了位置,再向这个向量中放东西,这样不需要反复新建,速度会增加10倍,只花了0.7秒左右。但R最重要的运算思路是向量化,也就是同时对向量各元素进行计算,而不是把向量元素一个个放到循环中。speedwalk2函数就是向量化计算的实现,这样下来代码速度又加快了十几倍,大约只需0.05秒,而且还没有用到多核心计算。

Viewing all articles
Browse latest Browse all 85

Trending Articles