Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R如何划分这两个矩阵?_R_Matrix - Fatal编程技术网

R如何划分这两个矩阵?

R如何划分这两个矩阵?,r,matrix,R,Matrix,我在3x5矩阵中选择一行,名为mat1,mat1[1,]。我想用另一个3x5矩阵mat2除以mat1[1,]。当我执行mat1[1,]/t(mat2)时,我得到了正确的答案。我想知道的是,如果我不转置mat2,R如何执行除法?我尝试过按行、按列除,但输出与R为mat1[1,]/mat2返回的结果不匹配。谁能给我解释一下吗?谢谢 例如: mat1 <- matrix(sample(1:50, 15, replace = T), byrow = T, ncol = 5) mat2 <-

我在3x5矩阵中选择一行,名为mat1,mat1[1,]。我想用另一个3x5矩阵mat2除以mat1[1,]。当我执行mat1[1,]/t(mat2)时,我得到了正确的答案。我想知道的是,如果我不转置mat2,R如何执行除法?我尝试过按行、按列除,但输出与R为mat1[1,]/mat2返回的结果不匹配。谁能给我解释一下吗?谢谢

例如:

mat1 <- matrix(sample(1:50, 15, replace = T), byrow = T, ncol = 5)
mat2 <- matrix(sample(51:100, 15, replace = T), byrow = T, ncol = 5)
rowID <- c("grade 1", "grade 2", "grade 3", "grade 4", "grade 5", "grade 6")
colID <- c("school A", "school B", "school C", "school D", "school E")

rownames(mat1) <- rowID[1:3]
rownames(mat2) <- rowID[4:6]
colnames(mat1) <- colID
colnames(mat2) <- colID

> mat1
        school A school B school C school D school E
grade 1       46       30       25       16       39
grade 2       24       44        4       48       13
grade 3       27       40        2       43       17
> mat2
        school A school B school C school D school E
grade 4       80       74       71       81       83
grade 5       90       57       97       87       86
grade 6       68       71       96       87       63

在上面,R在mat1[1]中使用了哪些元素来除以mat2中的哪些元素,顺序是什么

您的示例不可复制,因为它绘制了一个随机样本,并且您没有首先使用
set.seed
设置随机种子。只需创建数据并使用
dput
创建一个易于粘贴到问题中的版本


因为
mat1[1,]
是一个向量而不是矩阵,所以将向量除以矩阵。R按列处理分母中的矩阵,因此在第一个示例中:46/80、30/74、25/71等,因为在转置矩阵中,第一列是四年级学校。当矩阵未转置时,第一列为schoolA,得到46/80、30/90、25/68作为第一列,然后是16/74、39/57,46/71作为第二列中的前两行,因为R循环向量中的值。

您的示例不可复制,因为它绘制了一个随机样本,并且您没有先使用
set.seed
设置随机种子。只需创建数据并使用
dput
创建一个易于粘贴到问题中的版本


因为
mat1[1,]
是一个向量而不是矩阵,所以将向量除以矩阵。R按列处理分母中的矩阵,因此在第一个示例中:46/80、30/74、25/71等,因为在转置矩阵中,第一列是四年级学校。当矩阵没有被转置时,第一列是schoolA,你得到46/80、30/90、25/68作为第一列,然后16/74、39/57、46/71作为第二列的前两行,因为R循环向量中的值。

mat2
除以
mat1
将是
mat2/mat1
而不是你所发布的。请举例说明你的意思,我无法理解
mat1[1,]/t(mat2)
与你所说的将一个矩阵除以另一个相同维度的矩阵的目标之间的关系。谢谢@RuiBarradas,我添加了一个例子。希望它能澄清我的问题。将
mat2
除以
mat1
将是
mat2/mat1
而不是您发布的内容。请举例说明你的意思,我无法理解
mat1[1,]/t(mat2)
与你所说的将一个矩阵除以另一个相同维度的矩阵的目标之间的关系。谢谢@RuiBarradas,我添加了一个例子。希望它能澄清我的问题。谢谢你,这正是我想要的解释!也谢谢你的第一个建议!谢谢,这正是我想要的解释!也谢谢你的第一个建议!
> ratiograde1 <- mat1[1,] / t(mat2)
> ratiograde1
           grade 4   grade 5   grade 6
school A 0.5750000 0.5111111 0.6764706
school B 0.4054054 0.5263158 0.4225352
school C 0.3521127 0.2577320 0.2604167
school D 0.1975309 0.1839080 0.1839080
school E 0.4698795 0.4534884 0.6190476

> mat1[1,] / mat2
         school A  school B  school C  school D  school E
grade 4 0.5750000 0.2162162 0.4225352 0.4814815 0.3012048
grade 5 0.3333333 0.6842105 0.2577320 0.5287356 0.1860465
grade 6 0.3676471 0.6478873 0.1666667 0.3448276 0.6190476