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 -- [email protected]
> To unsubscribe send an email to [email protected]
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: [email protected]
>
signature.asc
Description: This is a digitally signed message part
_______________________________________________ NumPy-Discussion mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/numpy-discussion.python.org/ Member address: [email protected]
