Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

API design question: default value of `index` for ndmeasure functions

Abierto
#116 6 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
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

Comienza leyendo las funciones de dask_image.ndmeasure y el helper _norm_input_labels_index mostrado en la issue; después, compara cómo se comportan labels e index=None en las funciones afectadas. La tarea estará terminada cuando se haya alcanzado un diseño de API acordado para los índices predeterminados frente al manejo de máscaras, y el comportamiento coherente esté documentado y verificado mediante las pruebas relevantes.

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

Descripción

This is a question about the API design for label indices in dask_image.ndmeasure functions.

Where labels is given but index is None, the label array is overwritten and becomes a mask image. This was not very intuitive for me, and means the behaviour of the ndmeasure functions is inconsistent. In some cases (index=None) you get an aggregate value, and in others you get values for each individual label (even if there are multiple indices).

I think there's an argument to be made that if labels is given and index=None the default value should be the range of all non-zero labels (eg: [1, 2, 3, ..., n]). This would mean (a) no nasty surprise aggregations, and (b) you wouldn't need to near-constantly write index=da.arange(da.max(labels)) or revert to the slightly clunkier label_comprehension() syntax (I can never remember the six input arguments).

Questions

  1. Are the majority of use cases different than what I imagine here? If what I expect to be the most common use scenario is actually pretty uncommon, I may need to rethink my opinion.
  2. What is your opinion on replacing:
def _norm_input_labels_index(input, labels=None, index=None):
    ...
    elif index is None:
        labels = (labels > 0).astype(int)
        index = dask.array.ones(tuple(), dtype=int, chunks=tuple())

with this instead:

def _norm_input_labels_index(input, labels=None, index=None):
    ...
    elif index is None:
        index = dask.array.arange(dask.array.max(labels) + 1)[1:]

and making a separate mask() convenience function available.

In my view it's much clearer that area(input, mask(labels)) is expected to return an aggregate value, compared to area(input, labels, index=None).

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

Preparar el entorno

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 dask/dask-image

Todos los issues de dask/dask-image

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.