检查scipy稀疏矩阵条目是否存在

3

我使用以下方式初始化一个空的稀疏矩阵:

S = scipy.sparse.lil_matrix((n,n),dtype=int)

正如预期的那样,print S 不会显示任何内容,因为没有分配任何内容。 但是如果我测试:

print S[0,0]==0

我收到了true

是否有一种方法可以测试值是否已设置?例如类似于ifempty的方式?


稀疏矩阵的意义在于大多数值为0。没有“未分配”的值。 - Warren Weckesser
这并不完全正确。如果我将一个明确的0分配给一个条目,即S [0,0] = 0,并调用print S,则会返回值:(0, 0) 0。因此,某种方式可以区分未分配和0。 - Markus
可以,但你无法从访问S[0,0]中得出结果。你需要深入了解其底层表示形式。因此,这将取决于稀疏矩阵的格式(例如CSR、DOK、COO等)。 - Warren Weckesser
1个回答

1
你可以使用以下代码检查存储的值:

def get_items(s):
    s_coo = s.tocoo()
    return set(zip(s_coo.row, s_coo.col))

演示:

>>> n = 100
>>> s = scipy.sparse.lil_matrix((n,n),dtype=int)
>>> s[10, 12] = 1
>>> (10, 12) in get_items(s)
True

请注意,对于其他类型的稀疏矩阵,可以明确地设置为0:
>>> s = scipy.sparse.csr_matrix((n,n),dtype=int)
>>> s[12, 14] = 0
>>> (12, 14) in get_items(s)
True

我不建议在Scipy的各个版本中依赖“显式零”功能,特别是在像s[12, 14] = 0这样的代码行中。据我所知,这不是一个经过测试的API功能。 - joeln

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接