访问未通过 perfplot 等式检查的数据
Accessing data that does not pass equality check on perfplot
我是 运行 比较两个不同函数 f1
和 f2
性能的脚本。它不能传递 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传递给函数f1
和f2
,两个函数的输出都传递给参数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)
.
如果你仍然想在这个过程中检查那些值(但我建议你先检查函数f1
和f2
),你可以定义equality_check
函数如下:
def foo(x, y):
equal = np.array_equal(x, y)
if not equal:
print(x, y)
return equal
这样,导致异常的f1
和f2
的输出将被打印出来。
我是 运行 比较两个不同函数 f1
和 f2
性能的脚本。它不能传递 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传递给函数f1
和f2
,两个函数的输出都传递给参数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)
.
如果你仍然想在这个过程中检查那些值(但我建议你先检查函数f1
和f2
),你可以定义equality_check
函数如下:
def foo(x, y):
equal = np.array_equal(x, y)
if not equal:
print(x, y)
return equal
这样,导致异常的f1
和f2
的输出将被打印出来。