gpt4 book ai didi

python - 检查两个 numpy 数组是否相同

转载 作者:太空狗 更新时间:2023-10-29 22:17:58 25 4
gpt4 key购买 nike

假设我有一堆数组,包括xy,我想检查它们是否相等。通常,我可以只使用 np.all(x == y)(除了一些我现在忽略的愚蠢的极端情况)。

然而,这会计算(x == y)整个 数组,这通常是不需要的。我的数组真的很大,我有很多,两个数组相等的概率很小,所以十有八九,我真的只需要计算 (x == y) 的很小一部分all 函数可能返回 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)类似,但它们特别不涵盖提前终止的情况。

最佳答案

在 numpy 原生实现之前,您可以编写自己的函数并使用 numba 对其进行 jit 编译。 :

import numpy as np
import numba as nb


@nb.jit(nopython=True)
def arrays_equal(a, b):
if a.shape != b.shape:
return False
for ai, bi in zip(a.flat, b.flat):
if ai != bi:
return False
return True


a = np.random.rand(10, 20, 30)
b = np.random.rand(10, 20, 30)


%timeit np.all(a==b) # 100000 loops, best of 3: 9.82 µs per loop
%timeit arrays_equal(a, a) # 100000 loops, best of 3: 9.89 µs per loop
%timeit arrays_equal(a, b) # 100000 loops, best of 3: 691 ns per loop

最坏情况下的性能(数组相等)相当于 np.all 并且在提前停止的情况下,编译函数有可能比 np.all 好很多。

关于python - 检查两个 numpy 数组是否相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43973991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com