[Numpy-discussion] non-intuitive behaviour for isbyteswapped()?

Todd Miller jmiller at stsci.edu
Wed Jul 7 07:58:05 EDT 2004


On Tue, 2004-07-06 at 19:07, Philip Austin wrote:
> With numarray 1.0 and Mandrake 10 i686 I get the following:
> 
> >>> y=N.array([1,1,2,1],type="Float64")
> >>> y
> array([ 1.,  1.,  2.,  1.])
> >>> y.byteswap()
> >>> y
> array([  3.03865194e-319,   3.03865194e-319,   3.16202013e-322,
>          3.03865194e-319])
> >>> y.isbyteswapped()
> 0
>
> Should this be 1?

The behavior of byteswap() has been controversial in the past, at one
time implementing exactly the behavior I think you expected.

Without giving any guarantee for the future,  here's how things work
now:  byteswap() just swaps the bytes.  There's a related method,
togglebyteorder(), which inverts the sense of the byteorder:

	>>> y.byteswap()
	>>> y.togglebyteorder()
	>>> y.isbyteswapped()
	1

The ability to munge bytes and change the sense of byteorder
independently is definitely needed... but you're certainly not the first
one to ask this question.

There is also (Numeric compatible) byteswapped(), which both swaps and
changes sense, but it creates a copy rather than operating in place:
	
	>>> x = y.byteswapped()
	>>> (x is not y) and (x._data is not y._data)
	1

Regards,
Todd





More information about the NumPy-Discussion mailing list