代码之家  ›  专栏  ›  技术社区  ›  Franck Dernoncourt

如何检查SciPy CSR矩阵是否为空(即仅包含零)?

  •  5
  • Franck Dernoncourt  · 技术社区  · 9 年前

    检查 SciPy CSR matrix 是否为空(即仅包含零)?

    我使用 nonzero() :

    def is_csr_matrix_only_zeroes(my_csr_matrix):
        return(len(my_csr_matrix.nonzero()[0]) == 0)
    
    from scipy.sparse import csr_matrix
    print(is_csr_matrix_only_zeroes(csr_matrix([[1,2,0],[0,0,3],[4,0,5]])))
    print(is_csr_matrix_only_zeroes(csr_matrix([[0,0,0],[0,0,0],[0,0,0]])))
    print(is_csr_matrix_only_zeroes(csr_matrix((2,3))))
    print(is_csr_matrix_only_zeroes(csr_matrix([[0,0,0],[0,1,0],[0,0,0]])))
    

    输出

    False
    True
    True
    False
    

    但我想知道是否存在更直接或更有效的方法。

    (相关但不同: Check if scipy sparse matrix entry exists )

    1 回复  |  直到 7 年前
        1
  •  8
  •   user2357112    7 年前
    my_csr_matrix.nnz == 0
    

    这个 nnz attribute 记录非零项的数量……除非您的CSR矩阵是一种奇怪的、非标准化的形式,例如,如果它有重复的项或显式存储的零。

    如果必须处理重复条目或显式零,则可以使用更昂贵的 csr_matrix.count_nonzero method :

    my_csr_matrix.count_nonzero() == 0