首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优化方差计算,循环太慢

优化方差计算,循环太慢
EN

Stack Overflow用户
提问于 2015-03-18 17:11:25
回答 1查看 106关注 0票数 0

下面是在这个链接上回答的问题的下一步[在r](https://stackoverflow.com/questions/29125609/apply-function-too-slow-in-r)中应用函数太慢了

我得为很多物种计算一排特定的公式。该公式对应于方差计算,因此需要在上述链接中得到的结果。

我当前的脚本包括使用for-循环,这自然是非常慢的。我在下面的脚本中使用一个名为az的简单df简化了这个问题。

代码语言:javascript
运行
复制
az=data.frame(c(1,2,10),c(2,4,20),c(3,6,30))
colnames(az)=c("a","b","c")

# Necessary number calculated in step 1 (see link above)
m <- as.matrix(az)
m[is.na(m)] <- 0 #remove NA from sums
step1 = as.vector(m %*% m[nrow(m),])

# Initial for loop
prov=0 # prov for provisional number
    for (i in 1:nrow(az)){
            for (j in 1:ncol(az)){
                   prov=prov+az[i,j]*az[nrow(az),j]
                   prov=prov+az[i,j]*(az[nrow(az),j]-step1[i])^2
            }
        print(prov)
        prov=0
        }

由于我不得不对大量物种重复这个操作,我想知道是否有人有一个更有效的解决方案,也许使用矢量化的表达式。

致以亲切的问候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 17:26:55

此代码将返回与您的代码输出的值相同的值,但效率更高。

代码语言:javascript
运行
复制
> n<-nrow(m)
> mm<-t(m)
> prov<-mm*mm[,n]
> prov<-prov+mm*(mm[,n]-step1[col(mm)])^2
> colSums(prov)
[1]     82140    791480 113717400
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29128432

复制
相关文章

相似问题

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