五分钟快速上手¶
本页使用两个小型 diagram 演示全部公开操作。
定义 diagrams¶
每一行都是 [birth, death]:
import numpy as np
import topp
x = np.array([[0.0, 1.0], [0.25, 0.75]])
y = np.array([[0.0, 1.1], [0.30, 0.80]])
成对距离¶
bottleneck = topp.bottleneck_distance(x, y)
w1 = topp.wasserstein_distance(x, y)
w2 = topp.wasserstein_distance(x, y, order=2, internal_p=2)
print(bottleneck, w1, w2)
wasserstein_distance 默认计算精确的 \(W_{1,\infty}\)。传入 order=2, internal_p=2 可选择精确的 \(W_{2,2}\)。
预处理重复使用的查询¶
query = topp.prepare_diagram(x)
print(query.n_points)
print(query.n_finite_points)
print(topp.bottleneck_distance(query, y))
PreparedDiagram 持有经过验证的输入副本。之后修改 x 不会改变 query。
一个查询,多个目标¶
targets = [y, [[0.0, 2.0]], np.empty((0, 2))]
bottleneck_batch = topp.bottleneck_distances(query, targets)
wasserstein_batch = topp.wasserstein_distances(
query, targets, order=2, internal_p=2
)
两个结果都是一维 float64 数组,每个目标对应一个元素。
复用输出内存¶
out = np.empty(len(targets), dtype=np.float64)
returned = topp.bottleneck_distances(query, targets, out=out)
assert returned is out
精确阈值判断¶
if topp.bottleneck_within(query, y, 0.1):
print("距离不大于 0.1")
该调用直接判断 \(d_B(X,Y) \leq 0.1\),不会先计算近似距离再比较。