[Numpy-discussion] all elements equal
Keith Goodman
kwgoodman@gmail....
Mon Mar 5 13:29:13 CST 2012
On Mon, Mar 5, 2012 at 11:24 AM, Neal Becker <ndbecker2@gmail.com> wrote:
> Keith Goodman wrote:
>
>> On Mon, Mar 5, 2012 at 11:14 AM, Neal Becker <ndbecker2@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
More information about the NumPy-Discussion
mailing list