Hi all, TL;DR: Are there strong opinions on what:
arr = np.array([None])
arr[0] = np.array(3)
arr.fill(np.array(3))
Should give? Right now NumPy usually stores the 0-D array, I want to
make `arr.fill()` consistent, so that is what it would be doing also.
**Long discussion:**
NumPy has a bit of a consistency problem with item setting, that is,
what should happen if you have an array and set an individual element:
arr = np.arange(10, dtype=object) # object is most problematic
arr[0] = value
Or similarly (but currently somewhat different):
arr.fill(value)
I wish to make the behaviour more consistent here, that is, both of
these should use the same logic (fill is slightly different currently)
and that logic should be shared by all functionality that is based on
"setting a single element".
There is a tricky situation however if `value` is a 0-D array. In most
cases, we can just copy the value over (using correct casting) as if we
copied an array:
arr[0] = zero_d_arr
is the same as:
arr[0, ...] = zero_d_arr # definitely copies the array value
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.
Right now, i aligned `fill` with the item assignment, but this could be
argued.
Further related behaviour is that:
np.array(value) # unpacks any array
np.array([value, None], dtype=object) # does not unpack
Which allows you to pack arrays into object arrays.
Now, we could unpack making it impossible to place a 0-D array into an
object array except via `arr.itemset()`.
My current preference is to store the 0-D arrays as-is, and basically
say that passing a 0-D array as value for:
arr.fill(0d_arr)
arr[0] = 0d_arr # this is fine: arr[0, ...] = 0d_arr
it makes some issues around "array-like" objects a bit easier, and is
just what we do _most_ (but not all!) of the time. But I know that
many will look at it and immediately say: No this has to be unpacked!
So I am open to suggestions or changing this in general.
(However, I think aligning `arr.fill` is OK, changing `arr[0] = ...`, I
don't know.)
Cheers,
Sebastian
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]
