访问未通过 perfplot 等式检查的数据

Accessing data that does not pass equality check on perfplot

我是 运行 比较两个不同函数 f1f2 性能的脚本。它不能传递 equality_check 并引发 AssertionError: Equality check failure. (f1, f2)。如何访问失败的函数的参数和输出?

perfplot.show(
    setup=lambda n: np.random.randint(0, n, size = n),
    kernels=[f1, f2],
    n_range=[2 ** k for k in range(3, 14)],
    logx=True,
    logy=True,
    xlabel="n",
    equality_check=lambda x, y: np.array_equal(x, y)
)

在每一步中,参数通过perfplot传递给函数f1f2,两个函数的输出都传递给参数equality_check中指定的函数perfplot.show(或perfplot.bench)函数的:

equality_check=foo  # foo(x, y)

在您提供的代码中,您使用匿名函数 (lambda) 定义了该参数:

equality_check=lambda x, y: np.array_equal(x, y)

检查这两个函数是否确实产生相同的结果(对于相同的输入),以及该结果是否是具有相同形状的 NumPy 数组,因为您使用的是 np.array_equal(x, y).


如果你仍然想在这个过程中检查那些值(但我建议你先检查函数f1f2),你可以定义equality_check函数如下:

def foo(x, y):
    equal = np.array_equal(x, y)
    if not equal:
        print(x, y)
    return equal

这样,导致异常的f1f2的输出将被打印出来。