如果您想检查两个数组是否具有相同的shape AND elements,您应该使用np.array_equal,因为这是文档中推荐的方法。
在性能方面不要期望任何相等性检查会胜过另一个,因为没有太多空间可以优化comparing two elements。只是为了着想,我还是做了一些测试。
import numpy as np
import timeit
A = np.zeros((300, 300, 3))
B = np.zeros((300, 300, 3))
C = np.ones((300, 300, 3))
timeit.timeit(stmt='(A==B).all()', setup='from __main__ import A, B', number=10**5)
timeit.timeit(stmt='np.array_equal(A, B)', setup='from __main__ import A, B, np', number=10**5)
timeit.timeit(stmt='np.array_equiv(A, B)', setup='from __main__ import A, B, np', number=10**5)
> 51.5094
> 52.555
> 52.761
几乎相等,无需谈论速度。
(A==B).all() 的行为与以下代码 sn-p 非常相似:
x = [1,2,3]
y = [1,2,3]
print all([x[i]==y[i] for i in range(len(x))])
> True