【问题标题】:How to do matrix calculations on related lists of matrices in R如何对R中的相关矩阵列表进行矩阵计算
【发布时间】:2014-07-17 13:38:35
【问题描述】:

我有两个列表,每个列表中有两个矩阵.. 有没有办法对它们进行矩阵计算,即添加,其中来自matrix1的蓝色矩阵添加来自matrix2的蓝色矩阵,来自matrix1的红色矩阵和来自matrix2的红色矩阵 我能想到的唯一方法是在循环中完成它

> mymatrix1
$blue
     [,1] [,2] [,3] [,4] [,5]
[1,]   10    1    2   13    1
[2,]    2   10   11   13   13
[3,]    3   14    1   15    9
[4,]    7   15   10    5    3
[5,]   12    8   11    3   13

$red
     [,1] [,2] [,3] [,4] [,5]
[1,]    4    9   14    7   10
[2,]   15    9    7   13   13
[3,]    8    8    9    6    6
[4,]    8   13   15    1    7
[5,]   12   13   10   14    2


> mymatrix2
$blue
     [,1] [,2] [,3] [,4] [,5]
[1,]   20    2    4   26    2
[2,]    4   20   22   26   26
[3,]    6   28    2   30   18
[4,]   14   30   20   10    6
[5,]   24   16   22    6   26

$red
     [,1] [,2] [,3] [,4] [,5]
[1,]   12   27   42   21   30
[2,]   45   27   21   39   39
[3,]   24   24   27   18   18
[4,]   24   39   45    3   21
[5,]   36   39   30   42    6

请注意,我将有大约 10 个,并且不止一组(即蓝色、红色、绿色、紫色)

【问题讨论】:

  • 每个列表中的颜色顺序是否相同?列表中是否有其他颜色不存在的颜色?如果订购相同,您可以使用mapply("+", mymatrix1, mymatrix2, SIMPLIFY = F)mapply(function(i1, i2) mymatrix1[[i1]] + mymatrix2[[i2]], seq_along(mymatrix1), match(names(mymatrix1), names(mymatrix2)), SIMPLIFY = F) 之类的东西以防缺席。
  • 是的,它们应该是相同的顺序。谢谢

标签: r list matrix


【解决方案1】:

更新 2:对于两个以上的列表:

mL1 <- list(
  blue = matrix(1:25,nrow=5),
  red = matrix(2*(1:25),nrow=5),
  green = matrix(3*(1:25),nrow=5),
  orange = matrix(4*(1:25),nrow=5)
)
mL2 <- mL1
mL3 <- mL1
##
Reduce(function(x,y){
    Map('+',x,y)
  },
  list(mL1,mL2,mL3),
  accumulate=F
)
$blue
     [,1] [,2] [,3] [,4] [,5]
[1,]    3   18   33   48   63
[2,]    6   21   36   51   66
[3,]    9   24   39   54   69
[4,]   12   27   42   57   72
[5,]   15   30   45   60   75

$red
     [,1] [,2] [,3] [,4] [,5]
[1,]    6   36   66   96  126
[2,]   12   42   72  102  132
[3,]   18   48   78  108  138
[4,]   24   54   84  114  144
[5,]   30   60   90  120  150

$green
     [,1] [,2] [,3] [,4] [,5]
[1,]    9   54   99  144  189
[2,]   18   63  108  153  198
[3,]   27   72  117  162  207
[4,]   36   81  126  171  216
[5,]   45   90  135  180  225

$orange
     [,1] [,2] [,3] [,4] [,5]
[1,]   12   72  132  192  252
[2,]   24   84  144  204  264
[3,]   36   96  156  216  276
[4,]   48  108  168  228  288
[5,]   60  120  180  240  300

【讨论】:

  • 所以考虑到我将有大约 10 个,并且不止一组(即蓝色、红色、绿色、紫色)......唯一的方法是循环它们?
  • 哦,好吧,我误解了你的要求。很可能有比循环更优雅的解决方案,我再看看它。
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2016-06-12
  • 2015-05-17
  • 1970-01-01
  • 2014-02-19
相关资源
最近更新 更多