我有这个R函数来生成一个矩阵,它包含0和n之间的k个数的所有组合,其总和等于n。这是我的程序的瓶颈之一,因为它变得更小数目非常慢(因为它是计算发电机组)0和n之间的k个数的所有组合,其总和等于n,速度优化
下面是代码
sum.comb <-
function(n,k) {
ls1 <- list() # generate empty list
for(i in 1:k) { # how could this be done with apply?
ls1[[i]] <- 0:n # fill with 0:n
}
allc <- as.matrix(expand.grid(ls1)) # generate all combinations, already using the built in function
colnames(allc) <- NULL
index <- (rowSums(allc) == n) # make index with only the ones that sum to n
allc[index, ,drop=F] # matrix with only the ones that sum to n
}
您应该删除部分数据集。例如当你看nz时,你只想考虑k = 2时的数字1:z。然后使用相同的算法从第三列中删除数字(如果k = 3等)。 –
@HansRoggeman,这意味着几个嵌套的循环还是有更优雅的方式? – spore234
n和k的典型值是多少?不同的算法在飞机的不同部分可能表现更好。至少我们可以尝试改善你的情况。 – flodel