用户自定义函数#
显示 register_new 的示例
讨论其他操作符的共性
讨论 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()
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 |