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

Fra*_*urt 4 python scipy sparse-matrix is-empty

检查SciPy CSR矩阵是否为空(即仅包含零)的规范方法是什么?

我用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]])))
Run Code Online (Sandbox Code Playgroud)

输出

False
True
True
False
Run Code Online (Sandbox Code Playgroud)

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

(相关但不同:检查是否存在scipy稀疏矩阵条目)

use*_*ica 8

my_csr_matrix.nnz == 0
Run Code Online (Sandbox Code Playgroud)

nnz属性记录了NonZero条目的数量...除非您的CSR矩阵处于奇怪的非标准化形式,例如,如果它具有重复的条目或显式存储的零.

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

my_csr_matrix.count_nonzero() == 0
Run Code Online (Sandbox Code Playgroud)