R-将命令应用于矩阵中的所有行和列。从逻辑上更改命令中使用的值

R-将命令应用于矩阵中的所有行和列。从逻辑上更改命令中使用的值,r,matrix,apply,R,Matrix,Apply,我有两个矩阵。 (1) “mat”是n*n(3*3),包含项目之间的接近程度 mat = matrix(c(1,0,0.4,0,1,0.6,0.4,0.6,1),nrow=3,ncol=3) colnames(mat) = c("A","B","C") rownames(mat) = colnames(mat) (2) “ev”是x*n(4*3),包含“mat”项在“ev”中其他维度(行)中出现的频率 现在我想要一个新的矩阵“new”,其尺寸与“ev”相同,其中单元格的值为: “ev”中当前行

我有两个矩阵。 (1) “mat”是n*n(3*3),包含项目之间的接近程度

mat = matrix(c(1,0,0.4,0,1,0.6,0.4,0.6,1),nrow=3,ncol=3)
colnames(mat) = c("A","B","C")
rownames(mat) = colnames(mat)
(2) “ev”是x*n(4*3),包含“mat”项在“ev”中其他维度(行)中出现的频率

现在我想要一个新的矩阵“new”,其尺寸与“ev”相同,其中单元格的值为: “ev”中当前行的每列与“mat”中与“ev”中当前列相同的行的各列的乘积之和。这需要在新矩阵中按行和按列应用


在逐行命令中,它将如下所示:

new=matrix(2.8,0,3,1.6,2.2,4,3,3.4,3.4,2.4,3,4.6,nrow=4,ncol=3)
如何计算新矩阵第一行的列(如果为1到n)

new[1,1]=sum(ev[1,1:3]*mat[1,1:3])
new[1,2]=sum(ev[1,1:3]*mat[2,1:3])
new[1,n]=sum(ev[1,1:3]*mat[n,1:3])
如何计算最后一行的列(如果是1到n行)

如你所见,我真正需要做的唯一一件事是定义当我想要计算整个矩阵时,在“ev”中选择的行随着“new”的行而改变,“mat”中选择的行随着“new”的列而改变

之后,新矩阵(在本例中)应如下所示:

new=matrix(2.8,0,3,1.6,2.2,4,3,3.4,3.4,2.4,3,4.6,nrow=4,ncol=3)

你在描述矩阵乘法。R使用
%*%
进行矩阵乘法:

ev %*% mat
#      A   B   C
# LA 2.8 2.2 3.4
# LE 0.0 4.0 2.4
# LO 3.0 3.0 3.0
# LU 1.6 3.4 4.6

all(ev %*% mat == new)
# [1] TRUE
有关更多详细信息,请参阅


如果您更愿意创建自己的函数,我建议您阅读
for
循环。如果您搜索“r中的循环”。

您描述的是矩阵乘法。R使用
%*%
进行矩阵乘法:

ev %*% mat
#      A   B   C
# LA 2.8 2.2 3.4
# LE 0.0 4.0 2.4
# LO 3.0 3.0 3.0
# LU 1.6 3.4 4.6

all(ev %*% mat == new)
# [1] TRUE
有关更多详细信息,请参阅


如果您更愿意创建自己的函数,我建议您阅读
for
循环。如果您搜索“r中的循环”。

谢谢!我没想到会这么简单!我试着开始循环,但我真的不知道如何解决这个问题。谢谢!我没想到会这么简单!我试图开始使用循环,但我真的不知道如何解决这个问题。