On Tue, 2022-02-15 at 10:21 +0200, Matti Picus wrote: > > On 15/2/22 09:53, Stefan van der Walt wrote: > > On Mon, Feb 14, 2022, at 12:45, Sebastian Berg wrote: > > > But this is currently *not* consistently the case. I wish to > > > make this > > > consistent. The confusion is around object arrays, though: > > > > > > value = np.array(None, dtype=object) > > > arr[0] = value > > > > > > Stores `value` without unpacking it currently. > > > > > > arr.fill(value) > > > > > > Stores the `None` (unpacking `value`) if and only if `value` is > > > 0-D. > > That last behavior doesn't look right to me. An object array > > should be thought of as a collection of pointers, and if you happen > > to want to point to a NumPy array, so be it. > I think we should strive for consistency and code simplicity. In the > non-object case, it is clear that assignment will try to unpack an > ndarray. So we should do the same thing with object arrays, and > document > the change in behaviour. Could we suggest a backward compatible > alternative (would using a record dtype fit better with Stefan's > mental > model)?
A possible workaround might be `arr.itemset()`, although I am not quite convinced that it should do that. A structured array could behave differently maybe, but presumably: arr = np.array([1], "i,i") # structured arr[0] = (np.array(3), np.array(3)) Should also unpack (with correct casting, not via `__int__`). I guess we may have less special cases if we just unpack 0-D and _try_ to always pack N-D arrays with N>0 (which will often fail). I have to admit, I don't care too much about that special case. The point is that if done right these special cases should be confined to two places: 1. Discovering the dimension/dtype in `np.asarray(nested_objects)` 2. The `PyArray_Pack` that sets a single element of an array from an arbitrary Python object. And in the first part, we need special paths for "object" anyway. I can live with a "special case", if it is confined to `PyArray_Pack`. There are always weird things, e.g. Quantities does *never* want to be unpacked right now even though it is a subclass so we already have "tricky stuff" that really means we should channel all through "one right way", no matter how that way actually looks like. Cheers, Sebastian > > Matti > > > _______________________________________________ > NumPy-Discussion mailing list -- numpy-discussion@python.org > To unsubscribe send an email to numpy-discussion-le...@python.org > https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ > Member address: sebast...@sipsolutions.net >
signature.asc
Description: This is a digitally signed message part
_______________________________________________ NumPy-Discussion mailing list -- numpy-discussion@python.org To unsubscribe send an email to numpy-discussion-le...@python.org https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ Member address: arch...@mail-archive.com