1

我有两个矩阵:x

A B C
2 3 4
3 4 5

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)

提前感谢您的任何建议。

4

2 回答 2

3

这是没有 loops/*apply 系列的另一种方法(假设您的矩阵是xand 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

我不确定它是否会更快。但我认为这是一种有趣的方法。此外,这将在计算过程中占用结果矩阵的两倍内存。

于 2013-08-17T19:03:37.723 回答
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
于 2013-08-17T16:29:13.670 回答