首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的矩阵运算效率

R中的矩阵运算效率
EN

Stack Overflow用户
提问于 2017-06-24 05:00:49
回答 1查看 60关注 0票数 1

我有3个矩阵X,K和M,如下所示。

代码语言:javascript
运行
复制
x <- matrix(c(1,2,3,1,2,3,1,2,3),ncol=3)
K <- matrix(c(4,5,4,5,4,5),ncol=3) 
M <- matrix(c(0.1,0.2,0.3),ncol=1) 

以下是我需要完成的工作。

例如,

代码语言:javascript
运行
复制
Y(1,1)=(1-4)^2*0.1^2+(1-4)^2*0.2^2+(1-4)^2*0.3^2
Y(1,2)=(1-5)^2*0.1^2+(1-5)^2*0.2^2+(1-5)^2*0.3^2
...
Y(3,2)=(3-5)^2*0.1^2+(3-5)^2*0.2^2+(3-5)^2*0.3^2

目前我使用3for循环来计算R中的最终矩阵,但对于大型矩阵,这需要花费极长的时间来计算。我还需要更改矩阵M中的元素,以找到产生最小平方误差的最佳值。有没有更好的编码方式,比如欧几里得范数?

代码语言:javascript
运行
复制
for (lin in 1:N) {
  for (col in 1:K) {
    Y[lin,col] <- 0
    for (m in 1:M){
      Y[lin,col] <- Y[lin,col] + (X[lin,m]-K[col,m])^2 * M[m,1]^2
    }
  }
}

编辑:

我最终使用Rcpp在C++中编写代码,并从R调用它,它的速度要快得多!填充一个2000 * 2000矩阵需要2-3秒。

EN

回答 1

Stack Overflow用户

发布于 2017-06-26 23:51:14

谢谢。我能够弄明白这一点。这一改变使我的计算速度比以前快了一倍。对于任何可能感兴趣的人,我将最后一个For循环for(m in 1:M)替换为以下代码:

代码语言:javascript
运行
复制
Y[lin,col] <- norm(as.matrix((X[lin,]-K[col,]) * M[1,]),"F")^2

请注意,我转置了矩阵M,使其具有3列而不是1列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44729859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档