矩阵 R 的乘法

5

我如何进行乘法运算:

                    BNP.PA.Adjusted ACA.PA.Adjusted UG.PA.Adjusted
BNP.PA.Adjusted     0.010129967     0.009577789    0.007148473
ACA.PA.Adjusted     0.009577789     0.012127668    0.007340544
UG.PA.Adjusted      0.007148473     0.007340544    0.015503678

作者:

c(0.3 , 0.2 , 0.5)

为了获取:
                    BNP.PA.Adjusted       ACA.PA.Adjusted       UG.PA.Adjusted
BNP.PA.Adjusted     0.010129967x0.3x0.3   0.009577789x0.2x0.3   0.007148473x0.5x0.3
ACA.PA.Adjusted     0.009577789x0.3x0.2   0.012127668x0.2x0.2   0.007340544x0.5x0.2
UG.PA.Adjusted      0.007148473x0.3x0.5   0.007340544x0.2x0.5   0.015503678x0.5x0.5

我尝试使用%*%MaMatrix <- cov_m %*% Poids,但这只是......
                    BNP.PA.Adjusted   ACA.PA.Adjusted   UG.PA.Adjusted
BNP.PA.Adjusted     0.010129967x0.3   0.009577789x0.2   0.007148473x0.5
ACA.PA.Adjusted     0.009577789x0.3   0.012127668x0.2   0.007340544x0.5
UG.PA.Adjusted      0.007148473x0.3   0.007340544x0.2   0.015503678x0.5

我漏了什么?
4个回答

5

vector上有一个选项叫做outer,可以直接进行乘法操作。

m1 <- outer(v1, v1)

或者像@user20650建议的那样 (tcrossprod)

m1 <- tcrossprod(v1)
cov_m * m1

-输出

#               BNP.PA.Adjusted ACA.PA.Adjusted UG.PA.Adjusted
#BNP.PA.Adjusted    0.0009116970    0.0005746673   0.0010722709
#ACA.PA.Adjusted    0.0005746673    0.0004851067   0.0007340544
#UG.PA.Adjusted     0.0010722709    0.0007340544   0.0038759195

数据

v1 <- c(0.3, 0.2, 0.5)

cov_m <- structure(c(0.010129967, 0.009577789, 0.007148473, 0.009577789, 
0.012127668, 0.007340544, 0.007148473, 0.007340544, 0.015503678
), .Dim = c(3L, 3L), .Dimnames = list(c("BNP.PA.Adjusted", "ACA.PA.Adjusted", 
"UG.PA.Adjusted"), c("BNP.PA.Adjusted", "ACA.PA.Adjusted", "UG.PA.Adjusted"
)))

3
你可以尝试以下代码。
> diag(x) %*% cov_m %*% diag(x)
             [,1]         [,2]         [,3]
[1,] 0.0009116970 0.0005746673 0.0010722709
[2,] 0.0005746673 0.0004851067 0.0007340544
[3,] 0.0010722709 0.0007340544 0.0038759195

数据

> dput(x)
c(0.3, 0.2, 0.5)

> dput(cov_m)
structure(c(0.010129967, 0.009577789, 0.007148473, 0.009577789, 
0.012127668, 0.007340544, 0.007148473, 0.007340544, 0.015503678
), .Dim = c(3L, 3L), .Dimnames = list(c("BNP.PA.Adjusted", "ACA.PA.Adjusted",
"UG.PA.Adjusted"), c("BNP.PA.Adjusted", "ACA.PA.Adjusted", "UG.PA.Adjusted"
)))

你好,感谢你的帮助,它已经可以工作了。不能接受两个答案,所以我给你点了赞。 - TourEiffel

2
你可以使用 sweep()
sweep(mat, 2, FUN = `*`, vec) * vec

                BNP.PA.Adjusted ACA.PA.Adjusted UG.PA.Adjusted
BNP.PA.Adjusted    0.0009116970    0.0005746673   0.0010722709
ACA.PA.Adjusted    0.0005746673    0.0004851067   0.0007340544
UG.PA.Adjusted     0.0010722709    0.0007340544   0.0038759195

1
您可以简单地将矩阵的转置与向量相乘,然后再次转置:例如:
m <- matrix(1:9, ncol = 3)
m
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
x <- c(2, 4, 6)
m <- t(t(m) * x) # all you need
m
     [,1] [,2] [,3]
[1,]    2   16   42
[2,]    4   20   48
[3,]    6   24   54

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接