我有两个矩阵: x
A B C
2 3 4
3 4 5
和y
D E
1 2
3 2
如何减去列中元素的组合?给我以下结果:
AD AE BD BE CD CE
1 0 2 1 3 2
0 1 1 2 2 3
我尝试过应用外部,但不能使它适用于矩阵。矢量化函数会成为解决方案吗?我已经尝试过下面的代码,但似乎没有用。
vecfun= Vectorize(fun)
fun=function(a,b)(a-b)
outer(x,y, vecfun)
提前感谢任何建议。
答案 0 :(得分:3)
这不会使用outer
,但会获得您想要的结果:
> do.call(cbind,lapply(1:ncol(x),function(i) x[,i]-y))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 2 1 3 2
[2,] 0 1 1 2 2 3
答案 1 :(得分:3)
以下是没有循环/ *应用系列的另一种方法(假设您的矩阵为x
和y
):
x[ , rep(seq_len(ncol(x)), each=ncol(y))] - y[, rep(seq_len(ncol(y)), ncol(x))]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 2 1 3 2
[2,] 0 1 1 2 2 3
我不确定它是否会更快。但我认为这是一个有趣的方法。此外,在计算过程中,这将占用结果矩阵的两倍内存。