小编BdB*_*BdB的帖子

R中的慢点产品

我试图从331x23152和23152x23152矩阵中获取点积.

在Python和Octave中,这是一个微不足道的操作,但在R中,这似乎非常慢.

N <- 331
M <- 23152

mat_1 = matrix( rnorm(N*M,mean=0,sd=1), N, M) 
mat_2 = matrix( rnorm(N*M,mean=0,sd=1), M, M) 
tm3 <- system.time({
    mat_3 = mat_1%*%mat_2
})
print(tm3)
Run Code Online (Sandbox Code Playgroud)

输出是

user  system elapsed 
101.95    0.04  101.99 
Run Code Online (Sandbox Code Playgroud)

换句话说,这个点积需要100秒才能执行.

我正在运行R-3.4.0 64位,在带有16 GB RAM的i7-4790上运行RStudio v1.0.143.因此,我没想到这个操作需要这么长时间.

我忽略了什么吗?我已经开始研究bigmemory和bigalgebra的软件包了,但我不禁想到有一个解决方案而不必求助于软件包.


编辑

为了让您了解时差,这是Octave的脚本:

n = 331;
m = 23152;

mat_1 = rand(n,m);
mat_2 = rand(m,m);
tic
mat_3 = mat_1*mat_2;
toc
Run Code Online (Sandbox Code Playgroud)

输出是

Elapsed time is 3.81038 seconds.
Run Code Online (Sandbox Code Playgroud)

在Python中:

import numpy as np
import time

n = 331
m = 23152 …
Run Code Online (Sandbox Code Playgroud)

performance r matrix matrix-multiplication dot-product

4
推荐指数
1
解决办法
517
查看次数