将矩阵列的乘积组合成一个新矩阵

  • 本文关键字:新矩阵 一个 组合 阵列 r
  • 更新时间 :
  • 英文 :


我有一个10乘6的矩阵,我想用第1列乘第2:6列,然后用第2列乘第3:6列,以此类推,直到剩下第5列*第6列。矩阵如下。

M12.7 <- matrix(data = 1:60, nrow = 10, ncol = 6)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1   11   21   31   41   51
[2,]    2   12   22   32   42   52
[3,]    3   13   23   33   43   53
[4,]    4   14   24   34   44   54
[5,]    5   15   25   35   45   55
[6,]    6   16   26   36   46   56
[7,]    7   17   27   37   47   57
[8,]    8   18   28   38   48   58
[9,]    9   19   29   39   49   59
[10,]   10   20   30   40   50   60

这将导致总共15列的5个矩阵。然后我想把这些矩阵组合成一个10乘15的矩阵。我写了一个函数,让我达到了目标。但我不能把它应用于整个参考矩阵,在这种情况下是M12.7。功能是:

function(datamatrix, column, colz) { 
datamatrix[, column] * datamatrix[, (column+1):colz]
}

函数中的datamatrix不是data.matrix。非常感谢您的任何帮助

s <- seq(ncol(M12.7)-1)
do.call(cbind, lapply(s, function(x)M12.7[,x]*M12.7[, -seq(x)]))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,]   11   21   31   41   51  231  341  451  561   651   861  1071  1271  1581  2091
[2,]   24   44   64   84  104  264  384  504  624   704   924  1144  1344  1664  2184
[3,]   39   69   99  129  159  299  429  559  689   759   989  1219  1419  1749  2279
[4,]   56   96  136  176  216  336  476  616  756   816  1056  1296  1496  1836  2376
[5,]   75  125  175  225  275  375  525  675  825   875  1125  1375  1575  1925  2475
[6,]   96  156  216  276  336  416  576  736  896   936  1196  1456  1656  2016  2576
[7,]  119  189  259  329  399  459  629  799  969   999  1269  1539  1739  2109  2679
[8,]  144  224  304  384  464  504  684  864 1044  1064  1344  1624  1824  2204  2784
[9,]  171  261  351  441  531  551  741  931 1121  1131  1421  1711  1911  2301  2891
[10,]  200  300  400  500  600  600  800 1000 1200  1200  1500  1800  2000  2400  3000

另一种方式:

s <- seq(ncol(M12.7) -1)
n <- sequence(rev(s))+1
p <- cumsum(n==2)
M12.7[, p] *M12.7[, n+p-1]

如果我理解正确,我们可以使用应用于每行的累积乘积cumprod函数:

t(apply(M12.7, MARGIN = 1, FUN = cumprod))
[,1] [,2] [,3]   [,4]     [,5]      [,6]
[1,]    1   11  231   7161   293601  14973651
[2,]    2   24  528  16896   709632  36900864
[3,]    3   39  897  29601  1272843  67460679
[4,]    4   56 1344  45696  2010624 108573696
[5,]    5   75 1875  65625  2953125 162421875
[6,]    6   96 2496  89856  4133376 231469056
[7,]    7  119 3213 118881  5587407 318482199
[8,]    8  144 4032 153216  7354368 426553344
[9,]    9  171 4959 193401  9476649 559122291
[10,]   10  200 6000 240000 12000000 720000000

matrixStats中有rowCumprods

library(matrixStats)
rowCumprods(M12.7)
[,1] [,2] [,3]   [,4]     [,5]      [,6]
[1,]    1   11  231   7161   293601  14973651
[2,]    2   24  528  16896   709632  36900864
[3,]    3   39  897  29601  1272843  67460679
[4,]    4   56 1344  45696  2010624 108573696
[5,]    5   75 1875  65625  2953125 162421875
[6,]    6   96 2496  89856  4133376 231469056
[7,]    7  119 3213 118881  5587407 318482199
[8,]    8  144 4032 153216  7354368 426553344
[9,]    9  171 4959 193401  9476649 559122291
[10,]   10  200 6000 240000 12000000 720000000

最新更新