用户自定义函数#

  1. 显示 register_new 的示例

  2. 讨论其他操作符的共性

  3. 讨论 register_anonymous

Python-graphblas 需要 numba,它能够将用户定义的 Python 函数编译为本地机器代码,供 GraphBLAS 后端使用。这提供了非常高性能的函数。

示例用户定义的UnaryOp:

from graphblas import unary

def force_odd_func(x):
    if x % 2 == 0:
        return x + 1
    return x

unary.register_new("force_odd", force_odd_func)

v = Vector.from_coo([0, 1, 3, 4, 5], [1, 2, 3, 8, 14])
w = v.apply(unary.force_odd).new()
w#

0

1

2

3

4

5

1

3

3

9

15

类似的方法也适用于 BinaryOp 和 IndexUnaryOp。用户定义的 Monoids 和 Semirings 是由先前定义的和内置的 UnaryOps 和 BinaryOps 构建的。

Lambda的自动注册#

为了方便起见,任何用于替代UnaryOp的lambda表达式将自动编译为匿名注册。

Lambda 使用示例:

v.apply(lambda x: x % 5 - 2).new()

0

1

2

3

4

5

-1

0

1

1

2