[Numpy-discussion] Weird problem with subtracting ndarrays
Moroney, Catherine M (398D)
Catherine.M.Moroney at jpl.nasa.gov
Wed Jun 12 15:38:58 EDT 2013
Thanks for the tip. I thought it must be something simple like that. When I convert
the arrays to numpy.int32 things behave normally.
Another question though: a numpy.all() on the signed-int arrays shows that they
are equal. So why would the subtraction of the unsigned arrays wrap around like that?
On Jun 12, 2013, at 12:25 PM, <numpy-discussion-request at scipy.org>
> Message: 9
> Date: Wed, 12 Jun 2013 15:30:22 -0400
> From: Warren Weckesser <warren.weckesser at gmail.com>
> Subject: Re: [Numpy-discussion] weird problem with subtracting
> To: Discussion of Numerical Python <numpy-discussion at scipy.org>
> <CAGzF1udhTAmxPWwHsd9xQ386CBz2iXymmYC4kJJ3AOTRPZQzyg at mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
> On Wed, Jun 12, 2013 at 3:25 PM, Moroney, Catherine M (398D) <
> Catherine.M.Moroney at jpl.nasa.gov> wrote:
>> I've got two arrays of the same shape that I read in from a file, and I'm
>> trying to
>> difference them. Very simple stuff, but I'm getting weird answers.
>> Here is the code:
>>>>> counts1 = hfile1.read_grid_field("CFbA",
>>>>> counts2 = hfile2.read_grid_field("CFbA",
>>>>> counts1.max(), counts2.max()
>> (13, 13)
>>>>> counts1.min(), counts2.min()
>> (0, 0)
>>>>> numpy.all(counts1 == counts2)
>>>>> diff = counts1 - counts2
>> 4294967295 !! WHAT IS HAPPENING HERE ??
>>>>> sum = counts1 + counts2
>> As you can see, the range of values in both arrays is 0 to 13, and the sum
>> behaves normally, but the difference gives this weird number.
>> When I create dummy arrays, the subtraction works fine. So there must be
>> some funny value
>> lurking in either the counts1 or counts2 array, but the numpy.isnan() test
>> returns False.
>> Any ideas for how I debug this?
> Check the dtype of the arrays. They are probably unsigned integers, and
> the subtraction leads to wrap-around in some cases.
> For example:
> In : x = np.array([0, 1, 2], dtype=np.uint32)
> In : y = np.array([1, 1, 1], dtype=np.uint32)
> In : x - y
> Out: array([4294967295, 0, 1], dtype=uint32)
More information about the NumPy-Discussion