On Mon, Mar 5, 2012 at 11:24 AM, Neal Becker <ndbeck...@gmail.com> wrote: > Keith Goodman wrote: > >> On Mon, Mar 5, 2012 at 11:14 AM, Neal Becker <ndbeck...@gmail.com> wrote: >>> What is a simple, efficient way to determine if all elements in an array (in >>> my case, 1D) are equal? How about close? >> >> For the exactly equal case, how about: >> >> I[1] a = np.array([1,1,1,1]) >> I[2] np.unique(a).size >> O[2] 1 # All equal >> >> I[3] a = np.array([1,1,1,2]) >> I[4] np.unique(a).size >> O[4] 2 # All not equal > > I considered this - just not sure if it's the most efficient
Yeah, it is slow: I[1] a = np.ones(100000) I[2] timeit np.unique(a).size 1000 loops, best of 3: 1.56 ms per loop I[3] timeit (a == a[0]).all() 1000 loops, best of 3: 203 us per loop I think all() short-circuits for bool arrays: I[4] a[1] = 9 I[5] timeit (a == a[0]).all() 10000 loops, best of 3: 89 us per loop You could avoid making the bool array by writing a function in cython. It could grab the first array element and then return False as soon as it finds an element that is not equal to it. And you could check for closeness. Or: I[8] np.allclose(a, a[0]) O[8] False I[9] a = np.ones(100000) I[10] np.allclose(a, a[0]) O[10] True _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion