从列矩阵中有效地减去矩阵

时间:2018-05-04 03:02:53

标签: r performance matrix

我有一个相当简单的问题,并且想知道你们中的一些人是否知道一个非常有效(=快速)的解决方案:

我有两个矩阵matarr,希望完成以下操作:获取arr的每一列并从mat中减去它。然后取一个减去对数差的绝对值的对数。就是这样。现在,我正在使用sapply(见下文),但我很确定可以更快地完成它(可能使用sweep?)

代码:

mat <- matrix(.3, nrow=10, ncol = 4)
arr <- matrix(.1, nrow=10, ncol = 10000)
i <- ncol(arr)
result <- sapply(1:i, function(ii) (log(1-abs(mat-arr[,ii]))))

感谢您的任何想法!

1 个答案:

答案 0 :(得分:2)

我们可以复制,然后做出改变

result2 <- matrix(log(1- abs(rep(mat, ncol(arr)) - 
                      rep(arr, ncol(mat)))), ncol = i) 
identical(result, result2)
#[1] TRUE