Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

partition_dataset with ratios leaves some items out of every partition

Ouverte Adaptée aux débutants
#9,216 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 3 jours

@mottopanikeiku y travaille déjà.

Depuis le 22/10/2026.

  • #9217 par @mottopanikeiku — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
numpy, python, pytorch

Piste de recherche

Commencez dans monai/data/utils.py, au niveau de partition_dataset et de son calcul de taille basé sur les ratios autour des lignes liées ; vérifiez également le chemin associé partition_dataset_classes. Reproduisez le cas signalé d’éléments manquants, puis exécutez ou ajoutez des tests ciblés pour les répartitions par ratio et par classe. Le travail est terminé lorsque chaque élément d’entrée apparaît dans exactement une partition, y compris lorsque les tailles arrondies en laisseraient autrement de côté.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Describe the bug
The text below was written with AI assistance (Claude and GPT-6 Astra).

partition_dataset(data, ratios=...) rounds each partition size on its own (https://github.com/Project-MONAI/MONAI/blob/6920610c310200d683a3b00987a05893ccf1ca5f/monai/data/utils.py#L1217-L1224). When the rounded sizes add up to less than len(data), the remaining items are not in any partition, and nothing reports it. With three ratios this happens for about one length in five (0.8/0.1/0.1: 200 of the lengths 1 to 1000; 1/1/1: 334), and with five equal ratios up to two items are lost. partition_dataset_classes splits each class with the same function, so it can lose one item per class. Two-way splits are not affected.

I found this by reading and testing the code.

To Reproduce

from monai.data import partition_dataset

print(partition_dataset(list(range(10)), ratios=[1, 1, 1]))

data = list(range(63))  # e.g. the 63 training cases of MSD Task06_Lung
train, val, test = partition_dataset(data, ratios=[0.8, 0.1, 0.1], shuffle=True, seed=0)
print(len(train), len(val), len(test), "in no split:", sorted(set(data) - set(train + val + test)))

Output on dev (6920610):

[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
50 6 6 in no split: [44]

The same happens for other Decathlon training-set sizes, e.g. 303 (Task08_HepaticVessel) and 484 (Task01_BrainTumour) with 0.8/0.1/0.1, 63 and 303 with 0.7/0.15/0.15, and 32 (Task05_Prostate) with five equal ratios, which loses two cases. In a Decathlon-style pipeline (load_decathlon_datalist -> partition_dataset -> CacheDataset -> DataLoader) with 63 cases, one case is never loaded by the train, validation or test split.

Expected behavior
Every item should be in exactly one partition, as in the docstring example ([0.6, 0.2, 0.2] on 5 items gives [[1, 2, 3], [4], [5]]). drop_last is documented as not applying to the ratio path.

Environment
MONAI 1.6.1rc0+50.g6920610c (dev), PyTorch 2.14.1+cpu, NumPy 2.5.4, Python 3.12.13, Linux.

Additional context
I have a small fix that gives the leftover items to the partitions whose sizes were rounded down the most and leaves every split that already covers all items unchanged, plus tests, and can open a PR.

I made this report and directed the investigation, with AI assistance from Claude and GPT-6 Astra.

Langage dominant
Python
Étoiles
8.8k
Forks
1.7k
Merge moyen
6 j 12 h
PR mergées (30 j)
14

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de Project-MONAI/MONAI

Toutes les issues de Project-MONAI/MONAI

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.