我有3个矩阵X,K和M,如下所示。
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)
这是我需要完成的事情。
例如,
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
目前我使用3个for循环来计算R中的最终矩阵。但对于大型矩阵,这需要花费很长的时间来计算。我还需要更改矩阵M中的元素,以找到产生最小平方误差的最佳值。是否有更好的编码方式,即欧几里德规范?
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秒。
答案 0 :(得分:0)
谢谢。我能够弄清楚这一点。这一变化使我的计算速度提前了两倍。对于可能感兴趣的任何人,我用以下内容替换了最后一个for循环for(m in 1:M)
:
Y[lin,col] <- norm(as.matrix((X[lin,]-K[col,]) * M[1,]),"F")^2
请注意,我将矩阵M转置为3列而不是1列。