我试图从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)