将R中的两组向量相乘
假设我有两个矩阵A和B:将R中的两组向量相乘,r,matrix,R,Matrix,假设我有两个矩阵A和B: A: A1 A2 B: B1 B2 ROW1 V1 V2 ROW1 V3 V4 ROW2 V5 V6 ROW2 V7 V8 我想得到一个矩阵R,它包括两个矩阵列的每对乘积,如下所示: R: A1_B1 A1_B2 A2_B1 A2_B2 ROW1 V1*V3 V1*V4 V2*V3 V2*V4 ROW2 V5
A: A1 A2 B: B1 B2
ROW1 V1 V2 ROW1 V3 V4
ROW2 V5 V6 ROW2 V7 V8
我想得到一个矩阵R,它包括两个矩阵列的每对乘积,如下所示:
R: A1_B1 A1_B2 A2_B1 A2_B2
ROW1 V1*V3 V1*V4 V2*V3 V2*V4
ROW2 V5*V7 V5*V8 V6*V7 V6*V8
循环结构可以,但我想知道是否有更好的选项可用。首先让我们制作一些实际数据,我们可以实际使用:
> A=matrix(c(1,5,2,6),2,2)
> B=matrix(c(3,7,4,8),2,2)
> A
[,1] [,2]
[1,] 1 2
[2,] 5 6
> B
[,1] [,2]
[1,] 3 4
[2,] 7 8
现在的问题是将A和B的右列组合相乘。这些组合分别是A1、A1、A2和A2乘以B1 B2-我们可以从expand.grid
获得这些组合:
> cols = as.matrix(expand.grid(1:2,1:2))
> cols
Var1 Var2
[1,] 1 1
[2,] 2 1
[3,] 1 2
[4,] 2 2
然后我们将其列作为A列和B列(按其他顺序):
量化宽松
[请注意,我是如何仔细构造A和B来匹配您的V编号的,这样您就可以看到,在您有V6*V8的地方,我有6*8]您可以使用
应用
:
A <- matrix(1:4,2,2)
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
B <- A * 10
# [,1] [,2]
# [1,] 10 30
# [2,] 20 40
matrix(apply(A, 2, "*", B), nrow = nrow(A))
# [,1] [,2] [,3] [,4]
# [1,] 10 30 30 90
# [2,] 40 80 80 160
Acol <- grep("A", names(data.frame(A)), value = T)
Bcol <- grep("B", names(data.frame(B)), value = T)
AcolA给你一个2x2矩阵!多谢你指出。现在就喝早茶。cbind(A[,1]*B,A[,2]*B)
?您认为您需要多大程度的咖啡?不止一个矩阵?每个矩阵的列数不同?这是一个普遍现象,它适用于任意列数的两个矩阵。斯文的解决方案对我来说似乎是正确的。
R <- as.data.frame(R)
Acol <- grep("A", names(data.frame(A)), value = T)
Bcol <- grep("B", names(data.frame(B)), value = T)
colnames(R) <- outer(Acol, Bcol, paste, sep = ".")
A <- matrix(1:4,2,2)
B <- A * 10
cbind(A[,1]*B, A[,2]*B)
[,1] [,2] [,3] [,4]
[1,] 10 30 30 90
[2,] 40 80 80 160