On 01/25/2018 03:56 PM, josef.p...@gmail.com wrote:
On Thu, Jan 25, 2018 at 1:49 PM, Marten van Kerkwijk
<m.h.vankerkw...@gmail.com <mailto:m.h.vankerkw...@gmail.com>> wrote:
On Thu, Jan 25, 2018 at 1:16 PM, Stefan van der Walt
<stef...@berkeley.edu <mailto:stef...@berkeley.edu>> wrote:
> On Mon, 22 Jan 2018 10:11:08 -0500, Marten van Kerkwijk wrote:
>>
>> I think on the consistency argument is perhaps the most important:
>> views are very powerful and in many ways one *counts* on them
>> happening, especially in working with large arrays.
>
>
> I had the same gut feeling, but the fancy indexing example made me
> pause:
>
> In [9]: x = np.arange(12, dtype=float).reshape((3, 4))
>
> In [10]: p = x[[0, 1]] # copy of data
>
> Then:
>
> In [11]: x = np.array([(0, 1), (2, 3)], dtype=[('a', int), ('b', int)])
>
> In [12]: p = x[['a', 'b']] # copy of data, but proposal will change that
What does this do?
p = x[['a', 'b']].copy()
In 1.14.0 this creates an exact copy of what was returned by
`x[['a', 'b']]`, including any padding bytes.
My impression is that the problems with the view are because the padded
view doesn't behave like a "standard" dtype or array, i.e. the follow-up
behavior is the problematic part.
I think the padded view is a "standard array" in the sense that you can
easily create structured arrays with padding bytes, for example by using
the `align=True` options.
>>> np.zeros(3, dtype=np.dtype('u1,f4', align=True))
array([(0, 0.), (0, 0.), (0, 0.)],
dtype={'names':['f0','f1'], 'formats':['u1','<f4'],
'offsets':[0,4], 'itemsize':8, 'aligned':True})
Compare to
>>> np.zeros(3, dtype='u1,u1,u1,u1,f4')[['f0', 'f4']]
array([(0, 0.), (0, 0.), (0, 0.)],
dtype={'names':['f0','f4'], 'formats':['u1','<f4'],
'offsets':[0,4], 'itemsize':8})
There are still bugs in numpy that occur for arrays with padding.
Allan
Josef
>
> We're not doing the same kind of indexing here exactly (in one case we
> grab elements, in the other parts of elements), but the view behavior
> may still break the "mental expectation".
A bit off-topic, but maybe this is another argument to just allow
`x['a', 'b']` -- I never understood why a tuple was not the
appropriate iterable for getting multiple items from a record.
-- Marten
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org <mailto:NumPy-Discussion@python.org>
https://mail.python.org/mailman/listinfo/numpy-discussion
<https://mail.python.org/mailman/listinfo/numpy-discussion>
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@python.org
https://mail.python.org/mailman/listinfo/numpy-discussion