跳到内容

入门

安装

如果您尚未安装,请安装 sparse

pip install sparse

创建

首先,让我们从一个 numpy.ndarray 中构建一个稀疏的 sparse.COO 数组

import numpy as np
import sparse

x = np.random.random((100, 100, 100))
x[x < 0.9] = 0  # fill most of the array with zeros

s = sparse.COO(x)  # convert to sparse array

它们存储相同的信息并支持许多相同的操作,但稀疏版本占用更少的内存空间

>>> x.nbytes
8000000
>>> s.nbytes
1102706
>>> s
<COO: shape=(100, 100, 100), dtype=float64, nnz=100246, fill_value=0.0>

有关构建稀疏数组的更高效方法,请参阅关于构建稀疏数组的文档。

计算

许多常用的 Numpy 操作适用于 sparse.COO 对象,就像它们适用于 numpy.ndarray 对象一样。这包括算术运算、numpy.ufunc 操作,或像 tensordot 和 transpose 这样的函数。

>>> np.sin(s) + s.T * 1
<COO: shape=(100, 100, 100), dtype=float64, nnz=189601, fill_value=0.0>

然而,将零元素映射到非零元素的操作通常会改变填充值,而不是引发错误。

>>> y = s + 5
<COO: shape=(100, 100, 100), dtype=float64, nnz=100246, fill_value=5.0>

然而,如果您确定要将稀疏数组转换为密集数组,您可以使用 todense 方法(这会生成一个 numpy.ndarray

y = s.todense() + 5

有关更多操作,请参阅操作API 参考页面