首页 > 解决方案 > 为什么消除零项()不删除零条目?

问题描述

代码

import numpy as np
from scipy.sparse import csr_matrix

arr = np.array([[0,0,0], [0,0,1], [1,0,1]])
mat = csr_matrix(arr)
mat.eliminate_zeros()
print(mat.toarray())

输出

[[0 0 0]
[0 0 1]
[1 0 2]]

根据文档,此方法从矩阵中删除零条目。但是,为什么仍然有零?

从这个网站,我收集了以下内容:

eliminate_zeros从稀疏模式中删除矩阵中的所有零(即,没有为该位置存储任何值,而之前存储了一个值,但它是 0)。

我仍然可以访问那些零条目。

print(mat[0, 0])

标签: pythonnumpyscipy

解决方案


文档可能应该更明确。eliminate_zeros根本不影响稀疏矩阵的逻辑内容。

eliminate_zeros在不影响其逻辑内容的情况下更改稀疏矩阵的底层表示。它从支持稀疏矩阵的数据数组中删除显式存储的零。它用于减少空间消耗,并为假设没有显式存储零的算法准备稀疏矩阵。

它不会从稀疏矩阵中删除逻辑零。那是不可能的——你不能有一个稀疏矩阵,里面有一堆没有数据的洞。它不像掩码数组。


推荐阅读