【问题标题】:Accessing data that does not pass equality check on perfplot访问未通过 perfplot 相等性检查的数据
【发布时间】:2020-08-19 03:46:27
【问题描述】:

我正在运行比较两个不同函数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)
)

【问题讨论】:

    标签: python performance perfplot


    【解决方案1】:

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

    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 的输出将被打印出来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 2022-01-04
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多