<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">I recently put some thought on the issue because a user was complaining about PyTables unadvertendly removing the padding while doing a copy.
Incidentally, h5py also do respect padding while doing copies, so I took this seriously and
 released a new PyTables version mainly for fixing this.  You can see the use 
case and my reflections here: 
<a href="https://github.com/PyTables/PyTables/pull/720">https://github.com/PyTables/PyTables/pull/720</a>

</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">So, my take on this is that the padding is an integral part of the dtype and should be respected during copies too (principle of minimal surprise).  With this, I am definitely aligned (pun intended) with contract (1).<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Francesc<br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Missatge de Nathaniel Smith <<a href="mailto:njs@pobox.com">njs@pobox.com</a>> del dia dv., 12 d’abr. 2019 a les 4:08:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">My concern would be that to implement (2), I think .copy() has to<br>
either special-case certain dtypes, or else we have to add some kind<br>
of "simplify for copy" operation to the dtype protocol. These both add<br>
architectural complexity, so maybe it's better to avoid it unless we<br>
have a compelling reason?<br>
<br>
On Thu, Apr 11, 2019 at 6:51 AM Marten van Kerkwijk<br>
<<a href="mailto:m.h.vankerkwijk@gmail.com" target="_blank">m.h.vankerkwijk@gmail.com</a>> wrote:<br>
><br>
> Hi All,<br>
><br>
> An issue [1] about the copying of arrays with structured dtype raised a question about what the expected behaviour is: does copy always preserve the dtype as is, or should it remove padding?<br>
><br>
> Specifically, consider an array with a structure with many fields, say 'a' to 'z'. Since numpy 1.16, if one does a[['a', 'z']]`, a view will be returned. In this case, its dtype will include a large offset. Now, if we copy this view, should the result have exactly the same dtype, including the large offset (i.e., the copy takes as much memory as the original full array), or should the padding be removed? From the discussion so far, it seems the logic has boiled down to a choice between:<br>
><br>
> (1) Copy is a contract that the dtype will not vary (e.g., we also do not change endianness);<br>
><br>
> (2) Copy is a contract that any access to the data in the array will return exactly the same result, without wasting memory and possibly optimized for access with different strides. E.g., `array[::10].copy() also compacts the result.<br>
><br>
> An argument in favour of (2) is that, before numpy 1.16, `a[['a', 'z']].copy()` did return an array without padding. Of course, this relied on `a[['a', 'z']]` already returning a copy without padding, but still this is a regression.<br>
><br>
> More generally, there should at least be a clear way to get the compact copy. Also, it would make sense for things like `np.save` to remove any padding (it currently does not).<br>
><br>
> What do people think? All the best,<br>
><br>
> Marten<br>
><br>
> [1] <a href="https://github.com/numpy/numpy/issues/13299" rel="noreferrer" target="_blank">https://github.com/numpy/numpy/issues/13299</a><br>
> _______________________________________________<br>
> NumPy-Discussion mailing list<br>
> <a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
> <a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
<br>
<br>
<br>
-- <br>
Nathaniel J. Smith -- <a href="https://vorpus.org" rel="noreferrer" target="_blank">https://vorpus.org</a><br>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature">Francesc Alted</div>