[Numpy-discussion] Float view of complex array

Jens Jørgen Mortensen jensj at fysik.dtu.dk
Wed Jan 28 03:27:06 EST 2015


Den 27-01-2015 kl. 12:25 skrev Jaime Fernández del Río:
> On Mon, Jan 26, 2015 at 10:28 PM, Jens Jørgen Mortensen 
> <jensj at fysik.dtu.dk <mailto: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>
>     <mailto: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 for looking into this.  I'll take a look at the code, but it will 
be a couple of days before I will find the time.

Jens Jørgen

>
> 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>
>     <mailto: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>
>     <mailto: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 <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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20150128/b16dd109/attachment.html>


More information about the NumPy-Discussion mailing list