[Numpy-discussion] byteswapping a complex scalar

Travis Oliphant oliphant at enthought.com
Thu Oct 8 08:19:14 EDT 2009


On Oct 7, 2009, at 10:28 AM, Michael Droettboom wrote:

> I'm noticing an inconsistency as to how complex numbers are  
> byteswapped
> as arrays vs. scalars, and wondering if I'm doing something wrong.
>
>>>> x = np.array([-1j], '<c8')
>>>> x.tostring().encode('hex')
> '00000000000080bf'
> # This is a little-endian representation, in the order (real, imag)
>
> # When I swap the whole array, it swaps each of the (real, imag) parts
> separately
>>>> y = x.byteswap()
>>>> y.tostring().encode('hex')
> '00000000bf800000'
> # and this round-trips fine
>>>> z = np.fromstring(y.tostring(), dtype='>c8')
>>>> assert z[0] == -1j
>>>>
>
> # When I swap the scalar, it seems to swap the entire 8 bytes
>>>> y = x[0].byteswap()
>>>> y.tostring().encode('hex')
> 'bf80000000000000'
> # ...and this doesn't round-trip
>>>> z = np.fromstring(y.tostring(), dtype='>c8')
>>>> assert z[0] == -1j
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
> AssertionError
>>>>
>
> Any thoughts?


I just checked a fix for this into SVN (tests still need to be added  
though...)

I can't currently build SVN on my Mac for some reason (I don't know if  
it has to do with recent changes or not, but I don't have time to  
track it down right now....the error I'm getting is something about  
Datetime array scalar types not being defined which seems related to  
the work Dave and Stefan have been discussing).

It's a small change, though, and should work.

-Travis




More information about the NumPy-Discussion mailing list