小编Mat*_*ice的帖子

R和MATLAB上多维数组的算术平均值:性能的巨大差异

我在R和MATLAB上使用多维数组,这些数组有五个维度(总共14.5M的元素).我必须删除一个应用算术平均值的维度,我发现使用这两个软件的性能差异很大.

MATLAB:

>> a = rand([144  73  10   6  23]);
>> tic; b = mean(a,3); toc
Elapsed time is 0.014454 seconds.
Run Code Online (Sandbox Code Playgroud)

R:

> a = array(data = runif(144*73*6*23*10), dim = c(144,73,10,6,23))
> start <- Sys.time (); b = apply(a, c(1,2,4,5), mean); Sys.time () - start
Time difference of 1.229083 mins
Run Code Online (Sandbox Code Playgroud)

我知道应用函数很慢,因为它类似于通用函数,但我不知道如何处理这个问题,因为这种性能差异对我来说真的是一个很大的限制.我试图搜索colMeans/rowMeans函数的泛化,但我没有成功.

编辑 我将展示一个小样本矩阵:

> dim(a)
[1] 2 4 3
> dput(aa)
structure(c(7, 8, 5, 8, 10, 11, 9, 9, 6, 12, 9, 10, 12, 10, 14, 
12, 7, 9, 8, …
Run Code Online (Sandbox Code Playgroud)

performance matlab r

9
推荐指数
2
解决办法
1846
查看次数

将函数应用于多维数组:R vs MATLAB

这个问题可以被认为是关系到这一个,那帮助我提高将R性能在计算一个大阵列上的平均.不幸的是,在这种情况下,我试图应用更复杂的东西(如分位数计算).

我有一个包含超过4千万个元素的4-D数组,我想计算特定维度的第66个百分点.这里有MATLAB代码:

> n = randn(100, 50, 100, 20);
> tic; q = quantile(n, 0.66, 4); toc
Elapsed time is 0.440824 seconds.
Run Code Online (Sandbox Code Playgroud)

让我们在R中做类似的事情.

> n = array(rnorm(100*50*100*20), dim = c(100,50,100,20))
> start = Sys.time(); q = apply(n, 1:3, quantile, .66); print(Sys.time() - start)
Time difference of 1.600693 mins
Run Code Online (Sandbox Code Playgroud)

我知道MATLAB wrt R的性能更好,但在这种情况下我不知道该怎么做.可能我只需要等待2分钟而不是一秒......我希望有人可以建议我改善运行时间,无论如何,提前谢谢你......

更新 我已经在评论中应用了一些建议,我减少了运行时间:

> start = Sys.time(); q = apply(n, 1:3, quantile, .66, names = FALSE); print(Sys.time() - start)
Time difference of 33.42773 secs
Run Code Online (Sandbox Code Playgroud)

我们距离MATLAB的表现还很远,但至少我学到了一些东西.

UPDATE 我把这里与讨论'位数"功能,一些进步在这里 …

arrays matlab r

8
推荐指数
1
解决办法
1051
查看次数

标签 统计

matlab ×2

r ×2

arrays ×1

performance ×1