如何遍历稀疏数组的非零值

时间:2018-10-02 07:14:09

标签: julia sparse-matrix

我在Julia中有一个稀疏数组,并希望对其非零条目进行迭代。这样做有什么好方法?

到目前为止,我有:

using SparseArrays

a = sprandn(20,20,0.3)

for (x,y,v) in a
  print(x,y,v)
end

2 个答案:

答案 0 :(得分:2)

findnz函数返回一个元组,其中包含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

答案 1 :(得分:0)

这是直接的方法

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