Jeśli chcesz sprawdzić, czy dwie tablice mają takie same shapeORAZ elementspowinieneś użyć, np.array_equalponieważ jest to metoda zalecana w dokumentacji.
Pod względem wydajności nie oczekuj, że jakakolwiek kontrola równości pokona kolejną, ponieważ nie ma wiele miejsca na optymalizację comparing two elements. Na wszelki wypadek wciąż przeprowadzałem testy.
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
Tak prawie równe, nie trzeba mówić o prędkości.
Że (A==B).all()zachowuje się dość dużo jak poniższym fragmencie kodu:
x = [1,2,3]
y = [1,2,3]
print all([x[i]==y[i] for i in range(len(x))])
> True
np.array_equalIME.(A==B).all()ulegnie awarii, jeśli A i B mają różne długości . Począwszy od numpy 1.10, == podnosi ostrzeżenie o rezygnacji w tym przypadku .