[Numpy-discussion] Re: weird interaction: pickle, numpy, matplotlib.hist
Travis Oliphant
oliphant.travis at ieee.org
Thu Apr 6 02:46:02 EDT 2006
Robert Kern wrote:
> You have a byteorder issue. You Linux box, which I presume has an Intel or AMD
> CPU, is little-endian where your OS X box, which I presume has a PPC CPU, is
> big-endian. numpy arrays can store their data in either endianness on either
> kind of platform; their dtype objects tell you which byteorder they are using.
>
> In [54]: c.sort()
>
> In [55]: c
> Out[55]: array([ 0., 2., 3., 4., 5., 6., 7., 8., 9., 10., 1.])
>
>
> This is a bug.
>
> http://projects.scipy.org/scipy/numpy/ticket/47
>
Good catch. This bug was due to an oversight when adding the new
sorting functions. The case of byte-swapped data was not handled.
Judicious use of copyswap on the buffer fixed it.
But, this brings up the point that currently the pickled raw-data which
is read-in as a string by Python is used as the memory for the new array
(i.e. the string memory is "stolen"). This should work. The fact
that it didn't with sort was a bug that is now fixed in SVN. However,
operations on out-of-byte-order arrays will always be slower. Thus,
perhaps on pickle read the data should be copied to native byte-order if
necessary.
Opinions?
-Travis
More information about the NumPy-Discussion
mailing list