Open
Description
The standard seems to allow elements of a boolean index's shape to be zero.
The size of each dimension in B must equal the size of the corresponding dimension in
A
or be0
,
But I have read a few times, and I don't think it specifies what should happen in this case.
This returns an empty array in NumPy, CuPy, array_api_strict
, and jax.numpy
.
import array_api_strict as xp
x = xp.asarray([1, 2, 3])
i = xp.asarray([], dtype=xp.bool)
x[i] # array([], dtype=int64)
The behavior would follow from the usual rules if the index were integral, but it's not obvious to me that this should work for a boolean index of zero size. Indeed, PyTorch fails with:
IndexError: The shape of the mask [0] at index 0 does not match the shape of the indexed tensor [3] at index 0
and dask.array
fails with:
ValueError: operands could not be broadcast together with shapes (3,) (0,)
If the NumPy behavior is desired, does it follow from the usual rule, or is it a special case? Either way, it would help to spell out the desired behavior to ensure consistency among backends.
Metadata
Metadata
Assignees
Labels
No labels