stratifiedSampleIndices function
Stratified: strata gives group id per index; sample perGroup from each.
Implementation
List<int> stratifiedSampleIndices(List<Object?> strata, int perGroup, [Random? random]) {
final Random r = random ?? Random();
final Map<Object?, List<int>> groups = <Object?, List<int>>{};
for (int i = 0; i < strata.length; i++) {
groups.putIfAbsent(strata[i], () => []).add(i);
}
final List<int> out = [];
for (final List<int> indices in groups.values) {
indices.shuffle(r);
for (int j = 0; j < perGroup && j < indices.length; j++) {
out.add(indices[j]);
}
}
return out;
}