【发布时间】:2023-04-07 22:23:02
【问题描述】:
假设我有一堆数组,包括x 和y,我想检查它们是否相等。一般来说,我可以只使用np.all(x == y)(除非我现在忽略了一些愚蠢的角落案例)。
不过,这会评估(x == y) 的整个 数组,这通常是不需要的。我的数组真的很大,而且我有很多,而且两个数组相等的概率很小,所以很可能,我真的只需要在all函数之前评估(x == y)的一小部分可能返回 False,所以这对我来说不是最佳解决方案。
我尝试使用内置的all 函数,结合itertools.izip:all(val1==val2 for val1,val2 in itertools.izip(x, y))
但是,在两个数组相等的情况下,这似乎要慢得多,总的来说,它仍然不值得在np.all 上使用。我推测是因为内置 all 的通用性。而np.all 不适用于生成器。
有没有办法以更快的方式做我想做的事?
我知道这个问题类似于之前提出的问题(例如 Comparing two numpy arrays for equality, element-wise),但它们具体不包括提前终止的情况。
【问题讨论】:
-
@Thomas:那个函数只是在内部调用
np.all,所以它有点没用。 (我确实希望有一个专门为此目的的函数来进行短路,但可惜它没有。) -
嗯,真可惜。我猜,一个 numpy-internal 函数将是你唯一的机会,因为任何在 numpy 之外的循环几乎都会变慢。您是否考虑过直接联系开发人员?