【发布时间】:2019-10-16 09:38:00
【问题描述】:
这与here 提出的问题类似。所以我有一个包含多个由字符串定义的组的大矩阵,并且希望将每个组与一个向量相乘。这个想法是用零替换一组中的每个元素,让其他所有元素保持原样,然后与向量相乘并与下一组重复。理想情况下,结果将存储在矩阵中。
代码应该能够适用于更大的矩阵(具有更大的组),理想情况下也应该适用于a%*%b 或b%*%a。
例如,我们有矩阵a
a <- matrix(c(1:81) , nrow = 9 , byrow = TRUE)
和矢量b
b <- c(5:14)
让我们命名行和列:
names <- paste(rep(c("aaa" , "bbb" , "ccc") , each = 3) , rep(c(1:3) , times = 3) , sep = "")
rownames(a) <- names
colnames(a) <- names
给出:
aaa1 aaa2 aaa3 bbb1 bbb2 bbb3 ccc1 ccc2 ccc3
aaa1 1 2 3 4 5 6 7 8 9
aaa2 10 11 12 13 14 15 16 17 18
aaa3 19 20 21 22 23 24 25 26 27
bbb1 28 29 30 31 32 33 34 35 36
bbb2 37 38 39 40 41 42 43 44 45
bbb3 46 47 48 49 50 51 52 53 54
ccc1 55 56 57 58 59 60 61 62 63
ccc2 64 65 66 67 68 69 70 71 72
ccc3 73 74 75 76 77 78 79 80 81
我想将 aaa 的所有元素设置为零,并将其与b 相乘,然后与 bbb 和 ccc 重复。所以第一个矩阵看起来像:
aaa1 aaa2 aaa3 bbb1 bbb2 bbb3 ccc1 ccc2 ccc3
aaa1 0 0 0 4 5 6 7 8 9
aaa2 0 0 0 13 14 15 16 17 18
aaa3 0 0 0 22 23 24 25 26 27
bbb1 28 29 30 31 32 33 34 35 36
bbb2 37 38 39 40 41 42 43 44 45
bbb3 46 47 48 49 50 51 52 53 54
ccc1 55 56 57 58 59 60 61 62 63
ccc2 64 65 66 67 68 69 70 71 72
ccc3 73 74 75 76 77 78 79 80 81
还有第二个和第三个:
aaa1 aaa2 aaa3 bbb1 bbb2 bbb3 ccc1 ccc2 ccc3
aaa1 1 2 3 4 5 6 7 8 9
aaa2 10 11 12 13 14 15 16 17 18
aaa3 19 20 21 22 23 24 25 26 27
bbb1 28 29 30 0 0 0 34 35 36
bbb2 37 38 39 0 0 0 43 44 45
bbb3 46 47 48 0 0 0 52 53 54
ccc1 55 56 57 58 59 60 61 62 63
ccc2 64 65 66 67 68 69 70 71 72
ccc3 73 74 75 76 77 78 79 80 81
aaa1 aaa2 aaa3 bbb1 bbb2 bbb3 ccc1 ccc2 ccc3
aaa1 1 2 3 4 5 6 7 8 9
aaa2 10 11 12 13 14 15 16 17 18
aaa3 19 20 21 22 23 24 25 26 27
bbb1 28 29 30 31 32 33 34 35 36
bbb2 37 38 39 40 41 42 43 44 45
bbb3 46 47 48 49 50 51 52 53 54
ccc1 55 56 57 58 59 60 0 0 0
ccc2 64 65 66 67 68 69 0 0 0
ccc3 73 74 75 76 77 78 0 0 0
将这三个矩阵相乘得到三个向量,它们是cbinded 成一个矩阵:
[,1] [,2] [,3]
aaa1 427 465 465
aaa2 994 1194 1194
aaa3 1561 1923 1923
bbb1 2652 1786 2652
bbb2 3381 2272 3381
bbb3 4110 2758 4110
ccc1 4839 4839 2605
ccc2 5568 5568 3010
ccc3 6297 6297 3415
【问题讨论】:
标签: r