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 <je...@fysik.dtu.dk <mailto:je...@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
    > <sebast...@sipsolutions.net <mailto:sebast...@sipsolutions.net>
    <mailto:sebast...@sipsolutions.net
    <mailto:sebast...@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@scipy.org
    <mailto:NumPy-Discussion@scipy.org>
    <mailto:NumPy-Discussion@scipy.org
    <mailto:NumPy-Discussion@scipy.org>>
    >     >http://mail.scipy.org/mailman/listinfo/numpy-discussion
    >
    >
    >     _______________________________________________
    >     NumPy-Discussion mailing list
    > NumPy-Discussion@scipy.org <mailto:NumPy-Discussion@scipy.org>
    <mailto:NumPy-Discussion@scipy.org
    <mailto:NumPy-Discussion@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@scipy.org <mailto:NumPy-Discussion@scipy.org>
    > http://mail.scipy.org/mailman/listinfo/numpy-discussion

    _______________________________________________
    NumPy-Discussion mailing list
    NumPy-Discussion@scipy.org <mailto:NumPy-Discussion@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@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to