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? Catherine On Jun 12, 2013, at 12:25 PM, <[email protected]> wrote: > Message: 9 > Date: Wed, 12 Jun 2013 15:30:22 -0400 > From: Warren Weckesser <[email protected]> > Subject: Re: [Numpy-discussion] weird problem with subtracting > ndarrays > To: Discussion of Numerical Python <[email protected]> > Message-ID: > <cagzf1udhtamxpwwhsd9xq386cbz2ixymmyc4kjj3aotrpzq...@mail.gmail.com> > Content-Type: text/plain; charset="iso-8859-1" > > On Wed, Jun 12, 2013 at 3:25 PM, Moroney, Catherine M (398D) < > [email protected]> wrote: > >> Hello, >> >> 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", >> "TerrainReferencedRCCMFraction_Num") >>>>> counts2 = hfile2.read_grid_field("CFbA", >> "TerrainReferencedRCCMFraction_Num") >>>>> counts1.max(), counts2.max() >> (13, 13) >>>>> counts1.min(), counts2.min() >> (0, 0) >>>>> numpy.all(counts1 == counts2) >> False >>>>> diff = counts1 - counts2 >>>>> diff.max() >> 4294967295 !! WHAT IS HAPPENING HERE ?? >>>>> sum = counts1 + counts2 >>>>> sum.max() >> 26 >> >> 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? >> >> Catherine >> >> > Check the dtype of the arrays. They are probably unsigned integers, and > the subtraction leads to wrap-around in some cases. > > For example: > > In [1]: x = np.array([0, 1, 2], dtype=np.uint32) > > In [2]: y = np.array([1, 1, 1], dtype=np.uint32) > > In [3]: x - y > Out[3]: array([4294967295, 0, 1], dtype=uint32) > > > Warren > > _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
