集合#
python-graphblas 有三个用于保存数据的集合:Matrix、Vector 和 Scalar。 每个集合都是一个稀疏容器,意味着元素可能为空。每个集合都有一个单一的数据类型 以及基于维数定义的形状。
矩阵#
一个矩阵是一个二维稀疏数组。
M = gb.Matrix.from_coo(
[3, 0, 3, 5, 6, 0, 6, 1, 6, 2, 4, 1],
[0, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6],
[3, 2, 3, 1, 5, 3, 7, 8, 3, 1, 7, 4],
nrows=7, ncols=7
)
在笔记本中查看M的__repr__将如下所示,尽管名称、dtype和格式可能与这里显示的不同。
以下是可以在Matrix对象上访问的常见属性。
>>> M.dtype
INT64
>>> M.nrows
7
>>> M.ncols
7
>>> M.shape
(7, 7)
>>> M.nvals
12
>>> M.ndim
2
向量#
一个向量是一个一维稀疏数组。
v = gb.Vector.from_coo([0, 3, 4, 6], [12.1, -5.4, 2.9, 2.2], size=8)
在笔记本中查看v的__repr__将如下所示,尽管名称、dtype和格式可能与这里显示的不同。
以下是可以在Vector对象上访问的常见属性。
>>> v.dtype
FP64
>>> v.size
8
>>> v.shape
(8,)
>>> v.nvals
4
>>> v.ndim
1
标量#
一个标量是一个0维的稀疏数组。它要么包含一个值,要么不包含任何值。
s = gb.Scalar.from_value(5)
在笔记本中查看s的__repr__将如下所示。
以下是可以在标量对象上访问的常见属性。
>>> s.dtype
INT64
>>> s.value
5
>>> s.is_empty
False
>>> s.nvals
1
>>> s.shape
()
>>> s.ndim
0
不透明对象#
根据规范,GraphBLAS中的集合是不透明的对象。理论上,这意味着用户不应该关心集合是如何存储的,将所有细节留给后端实现。
python-graphblas 的后端是 SuiteSparse:GraphBLAS,它选择公开其存储格式。例如,矩阵可能存储为 'csr' 或 'csc' 或 'bitmapr' 或其他几种格式之一。
这些格式在某些情况下可以用于微调算法,但在大多数情况下可以安全地忽略。 SuiteSparse:GraphBLAS 有非常好的默认设置,适用于大多数用例,无需手动调整。
当需要手动调优时,请查看API Reference以获取有关.ss命名空间的详细信息。
集合方法#
重复#
可以使用.dup()来复制集合。这会创建一个与原始对象具有相同形状、数据类型和值的完全独立的对象。
w = v.dup()
清除#
可以使用.clear()来清空集合。当对象的内容不再需要时,可以使用此方法来释放内存,但对象稍后会被重用(可能在循环中)。形状和数据类型保持不变,但集合将完全稀疏(即nvals == 0)。
>>> M.clear()
>>> M.nvals
0
to_coo#
要从集合返回到索引和值,可以调用.to_coo()。NumPy数组将以元组形式返回。
>>> v = gb.Vector.from_coo([0, 3, 5], [2.0, 3.1, 4.7])
>>> idx, vals = v.to_coo()
>>> idx
array([0, 3, 5], dtype=uint64)
>>> vals
array([2.0, 3.1, 4.7])
请注意,Scalar 没有 .to_coo()。相反,.value 属性将提取基础值,如果 Scalar 为空,则返回 None。
空构造函数#
可以通过指定dtype和维度直接从集合类创建空集合。
# Create an empty 6x7 FP64 Matrix
M = gb.Matrix(float, 6, 7)
# Create an empty 100-element Vector with INT32 dtype
v = gb.Vector('int32', 100)
# Create an empty boolean Scalar
s = gb.Scalar(bool)