Skip to content

Boolean indexing when elements of mask shape are zero? #929

Open
@mdhaber

Description

@mdhaber

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 be 0,

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions