【问题标题】:Iterating over non-zero elements of a Sparse Matrix in R using a function使用函数迭代 R 中稀疏矩阵的非零元素
【发布时间】:2015-05-02 03:45:44
【问题描述】:

以下是一个评估函数,我将其用作遗传算法的输入:

evaluate <- function(string=c()) {
    z <- 0
    for (i in 1:56) {
        z=(z+cost[i,string[i]])
        for (j in 1:numadj[i]) {
            coi<-adj[i,j]
            d1<-string[i]
            d2<-string[coi]
            z=z+comrev[d1,d2]*wt[i,j]
        }
    }
    z
}

Cost 是一个有很多零的52x52 稀疏矩阵。目前,代码实际上是在遍历所有元素。我想确保上述函数只遍历非零值。

感谢任何帮助。

【问题讨论】:

  • 您可以考虑使用Matrix 库。通过使用str 在对象中进行挖掘,您将看到它如何索引非零元素。

标签: r sparse-matrix


【解决方案1】:

您实际上并没有迭代您的所有 52x52(56x56?)整体 成本矩阵,如果你像这样重写你的代码,你可以看到它:

evaluate <- function(string=c()) {
    z <- 0
    for (i in 1:56) 
        z = z + cost[i,string[i]]

    for (i in 1:56) 
        for (j in 1:numadj[i]) 
            z = z + comrev[string[i],
                           string[adj[i,j]]]*wt[i,j]
    return(z)
}

也就是说,您可以更有效地初始化z,就像这样

evaluate <- function(string=c()) {

    z = sum(cost[cbind(1:56,match(string,colnames(cost))[1:56])])

    for (i in 1:56) 
        for (j in 1:numadj[i]) 
            z = z + comrev[string[i],
                           string[adj[i,j]]]*wt[i,j]
    return(z)
}

我怀疑识别零的成本与在此解决方案中将零元素相加的成本相似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多