Julia 如何迭代稀疏数组的非零值

Julia 如何迭代稀疏数组的非零值,julia,sparse-matrix,Julia,Sparse Matrix,我在Julia中有一个稀疏数组,希望迭代它的非零项。这样做的好方法是什么 到目前为止,我已经: using SparseArrays a = sprandn(20,20,0.3) for (x,y,v) in a print(x,y,v) end 该函数返回一个元组,其中包含稀疏矩阵的x、y和值分量的数组。就是 findnz(a) gives ([x1, x2, x3, ...], [y1, y2, y3, ...], [v1, v2, v3, ...]) 您可以像迭代器一样使用它,

我在Julia中有一个稀疏数组,希望迭代它的非零项。这样做的好方法是什么

到目前为止,我已经:

using SparseArrays

a = sprandn(20,20,0.3)

for (x,y,v) in a
  print(x,y,v)
end
该函数返回一个元组,其中包含稀疏矩阵的x、y和值分量的数组。就是

findnz(a) gives ([x1, x2, x3, ...], [y1, y2, y3, ...], [v1, v2, v3, ...])
您可以像迭代器一样使用它,如下所示:

for (x,y,v) in zip(findnz(a)...)
  println(x,' ',y,' ',v)
end

这里有一个直接的方法

using SparseArrays

function print_nz(A)
    for col in 1:size(A, 2)
        for r in nzrange(A, col)
            println(rowvals(A)[r], ' ', col, ' ',  nonzeros(A)[r])
        end
    end
end
以及正在使用的示例:

julia> A = [1 2 1
            0 0 1
            3 0 0];

julia> print_nz(sparse(A))
1 1 1
3 1 3
1 2 2
1 3 1
2 3 1

这真的取决于你想做什么。你需要这些值的索引吗?如果不是,你可以在
非零(A)
@fredrikekre上迭代:我需要索引。在我的用例中,值本身并不重要;但是对于一个简单的循环(比如添加所有矩阵条目),它比@Kristofer Carlsson的解决方案慢10倍左右