Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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
Matlab中矩阵乘法和求和函数到R的转换_R_Matlab_Sum_Matrix Multiplication - Fatal编程技术网

Matlab中矩阵乘法和求和函数到R的转换

Matlab中矩阵乘法和求和函数到R的转换,r,matlab,sum,matrix-multiplication,R,Matlab,Sum,Matrix Multiplication,我正在将一组相当复杂的代码从Matlab转换为R。我在Matlab方面没有任何经验,并且是R方面的新手 我有一段代码(在matlab中): 我已对其进行了简化,并将重点放在第一部分(如果我能解决第一部分,我相信我能完成其余部分): tao(或A)和Sik(或B)是矩阵。所以我的假设是,我在这里执行矩阵乘法(A*B)并对结果列求和。“1”是我在那句话中最不喜欢的。在R中,1可能表示我们讨论的是行的总和,而不是列(由2表示)。但是我找不到任何支持这种Matlab语句的文档 我正考虑使用这样的语句(当

我正在将一组相当复杂的代码从Matlab转换为R。我在Matlab方面没有任何经验,并且是R方面的新手

我有一段代码(在matlab中):

我已对其进行了简化,并将重点放在第一部分(如果我能解决第一部分,我相信我能完成其余部分):

tao(或A)和Sik(或B)是矩阵。所以我的假设是,我在这里执行矩阵乘法(A*B)并对结果列求和。“1”是我在那句话中最不喜欢的。在R中,1可能表示我们讨论的是行的总和,而不是列(由2表示)。但是我找不到任何支持这种Matlab语句的文档

我正考虑使用这样的语句(当然,太多的“1”和“,”)


J由于R和Matlab中的约定不同,因此必须为每种语言学习特性(就像您的语言类比一样!)。Matlab命令
sum(A.*B,1)
意味着将A和B元素相乘,因此它们必须是相同的形状,然后沿维度1求和,即将每一行相加以得到列和。维度1是默认值,因此,
sum(A.*B)
将执行与
sum(A.*B,1)
相同的操作。由于R将*视为矩阵乘法的元素,因此以下Matlab和R代码将在
J
中生成相同的数字列:

Matlab:

A=[[1,2,3];[4,5,6];[7,8,9]];
B=[[10,11,12];[13,14,15];[16,17,18]];
J=sum(A.*B,1)';  %the ' means to transpose the column sums to be a 3x1 matrix
R:


A点运算符在Matlab中非常有意义!看看这个问题:和它链接到的罗塞塔石头。如果您刚刚继承了代码,您是否有“已知良好”的输入和输出?(可能太多希望你有实际的单元测试和回归测试了)。
A.*B
不是矩阵乘法!它是元素对元素的乘法。说
A=[1 2 3]
B=[1 4 8]
A.*B=[1 8 24]
。执行
sum(x,1)
sum(x)
相同,它只对每列求和。在Matlab中键入
help sum
,或者通过谷歌搜索“Matlab sum”可以找到解释这一点的文档。但我对R一无所知!还有比尝试将代码从一种你不懂的语言移植到另一种你不懂的语言更糟糕的想法,但我现在想不出任何方法。在这里,看起来你甚至不知道Matlab代码是否正在完成你想要完成的任务。谢谢cphlewis和David的建议。卡尔·维特霍夫,我没什么好说的,所以。。。继续。写矩阵乘法是我的错误,因为它有非常具体的含义。我知道matlab将.*解释为向量的元素乘法。然而,在我的“前期工作”中,我使用了一些网站,这些网站推荐代码片段从Matlab转到R,我看到了这个页面,它简洁地说Matlab操作a.*b相当于R a*b。我仍然有点不明白Matlab中“1”的重要性,它意味着对矩阵的行求和
a.*B
J = (sum(A.*B,1))' - ...
J<- (apply(A*B, 1), 1, sum)
A=[[1,2,3];[4,5,6];[7,8,9]];
B=[[10,11,12];[13,14,15];[16,17,18]];
J=sum(A.*B,1)';  %the ' means to transpose the column sums to be a 3x1 matrix
A<-matrix(c(1,2,3,4,5,6,7,8,9),3,byrow=T)
B<-matrix(c(10,11,12,13,14,15,16,17,18),3,byrow=T)
J<-matrix(colSums(A*B)) # no transpose needed here: nrow(J)==3