[Numpy-discussion] Float view of complex array

Jaime Fernández del Río jaime.frio at gmail.com
Tue Jan 27 06:25:54 EST 2015


On Mon, Jan 26, 2015 at 10:28 PM, Jens Jørgen Mortensen <jensj at fysik.dtu.dk>
wrote:

> On 01/26/2015 11:02 AM, Jaime Fernández del Río wrote:
> > On Mon, Jan 26, 2015 at 1:41 AM, Sebastian Berg
> > <sebastian at sipsolutions.net <mailto:sebastian at sipsolutions.net>> wrote:
> >
> >     On Mo, 2015-01-26 at 09:24 +0100, Jens Jørgen Mortensen wrote:
> >     > Hi!
> >     >
> >     > I have a view of a 2-d complex array that I would like to view
> >     as a 2-d
> >     > float array.  This works OK:
> >     >
> >     >  >>> np.ones((2, 4), complex).view(float)
> >     > array([[ 1.,  0.,  1.,  0.,  1.,  0.,1.,  0.],
> >     >         [ 1.,  0.,  1.,  0.,  1.,  0.,  1.,  0.]])
> >     >
> >     > but this doesn't:
> >     >
> >     >  >>> np.ones((2, 4), complex)[:, :2].view(float)
> >     > Traceback (most recent call last):
> >     >    File "<stdin>", line 1, in <module>
> >     > ValueError: new type not compatible with array.
> >     >  >>> np.__version__
> >     > '1.9.0'
> >     >
> >     > and I don't understand why.  When looking at the memory layout,
> >     I think
> >     > it should be possible.
> >     >
> >
> >     Yes, it should be possible, but it is not :). You could hack it by
> >     using
> >     `np.ndarray` (or stride tricks). Or maybe you are interested
> >     making the
> >     checks whether it makes sense or not less strict.
> >
> >
> > How would it be possible? He goes from an array with 16 byte strides
> > along the last axis:
> >
> > r0i0, r1i1, r2i2, r3i3
> >
> > to one with 32 byte strides, which is OK
> >
> > r0i0, xxxx, r2i2, xxxx
> >
> > but everything breaks down when he wants to have alternating strides
> > of 8 and 24 bytes:
> >
> > r0, i0, xxxx, r2, i2, xxxx
>
> No, that is not what I want.  I want this:
>
> r0, i0, r1, i1, xxxx, xxxx
>
> with stride 8 on the last axis - which should be fine.  My current
> workaround is to do a copy() before view() - thanks Maniteja.


My bad, you are absolutely right, Jens...

I have put together a quick PR (https://github.com/numpy/numpy/pull/5508)
that fixes your use case, by relaxing the requirements for views of
different dtypes. I'd appreciate if you could take a look at the logic in
the code (it is profusely commented), and see if you can think of other
cases that can be viewed as another dtype that I may have overlooked.

Thanks,

Jaime


>
Jens Jørgen
>
> >
> > which cannot be hacked in any sensible way.
> >
> > What I think could be made to work, but also fails, is this:
> >
> > np.ones((2, 4), complex).reshape(2, 4, 1)[:, :2, :].view(float)
> >
> > Here the original strides are (64, 16, xx) and the resulting view
> > should have strides (64, 32, 8), not sure what trips this.
> >
> > Jaime
> >
> >
> >     - Sebastian
> >
> >     > Jens Jørgen
> >     >
> >     > _______________________________________________
> >     > NumPy-Discussion mailing list
> >     > NumPy-Discussion at scipy.org <mailto:NumPy-Discussion at scipy.org>
> >     > http://mail.scipy.org/mailman/listinfo/numpy-discussion
> >
> >
> >     _______________________________________________
> >     NumPy-Discussion mailing list
> >     NumPy-Discussion at scipy.org <mailto:NumPy-Discussion at scipy.org>
> >     http://mail.scipy.org/mailman/listinfo/numpy-discussion
> >
> >
> >
> >
> > --
> > (\__/)
> > ( O.o)
> > ( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus
> > planes de dominación mundial.
> >
> >
> > _______________________________________________
> > NumPy-Discussion mailing list
> > NumPy-Discussion at scipy.org
> > http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>



-- 
(\__/)
( O.o)
( > <) Este es Conejo. Copia a Conejo en tu firma y ayúdale en sus planes
de dominación mundial.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20150127/05cb5dd9/attachment.html>


More information about the NumPy-Discussion mailing list