RFC: add APIs for setting elements via an array of indices (i.e., put, put_along_axis, etc)

Abierto
#979 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
25/100
Tipo de issue
Nueva funcionalidad
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
numpy, python, pytorch, tensorflow
Área
data

Línea de trabajo

Comienza con la discusión sobre la indexación de array API en gh-177 y el comentario de issue de array-api enlazado; después, compara las APIs de NumPy, CuPy, JAX, PyTorch, TensorFlow, Dask y Ndonnx indicadas. Se considera terminada cuando la propuesta define una API y una semántica establecidas e interoperables para establecer elementos mediante índices, incluido el comportamiento para arrays inmutables.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Copied and adapted from @kgryte's proposal at gh-177 per https://github.com/data-apis/array-api/issues/177#issuecomment-2883011323

Proposal

Add APIs for setting elements via an array of indices.

Motivation

Currently, the array API specification does not provide a direct means of setting a list of elements along an axis. Such operations are relatively common in NumPy usage either via "fancy indexing" or put APIs.

The main argument is that Indexing does not currently support providing a array of indices to index into an array. The principal reason for not supporting fancy indexing is . However, use of fancy indexing is relatively common in NumPy and similar libraries where dynamically setting rows/cols/values is possible and can be readily implemented. Another reason for not support fancy indexing mutation is that some libraries feature immutable arrays. array_api_extra.at.set demonstrates that it is often sufficient to mutate where possible and create a copy with the specified updates otherwise.

Background

The following table summarizes library implementations of such APIs:

op NumPy CuPy JAX.numpy Torch Tensorflow Dask.array Ndonnx
setting elements along axis put put put scatter_? scatter_nd? ?
setting elements over matching 1d slices put_along_axis put_along_axis put_along_axis scatter_? See pytorch/pytorch#120209. scatter_nd? ?

Discussion about these function in gh-177 concluded with https://github.com/data-apis/array-api/issues/177#issuecomment-1514155595, especially:

The JAX issue is most difficult to resolve (can be done, but a lot of work still to deal with read-only views or similar), but the lack of API uniformity makes this a hard sell in general.

This seems to be resolved. jax.numpy.put and jax.numpy.put_along_axis are implemented; they just return modifyied copies rather than mutating the array in place.

Lenguaje dominante
Python
Estrellas
281
Forks
52
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de data-apis/array-api

Todos los issues de data-apis/array-api

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.