A>На c# за минуту пишется специализированный экстеншн (можно собрать свою библиотеку и переиспользовать в любом проекте) и код сокращается до
A> | cut |
| A>A> (trainSampleCount / 3).ForEach(i =>
A> {
A> img.DrawEx(trainData1, colors[0], i).
A> DrawEx(trainData1, colors[1], i).
A> DrawEx(trainData1, colors[2], i);
A> });
A>
|
| |
Только вот у того, кто будет читать этот код, возникнет много вопросов. Что такое DrawEx? Зачем DrawEx принимает параметр i? Что должно содержаться в trainData1 (какой размерности массив/какой порядок следования координат)? Круг какого радиуса нарисует DrawEx? Что будет, если i выйдет за границы размера trainData1 (exception или ничего)?
С другой стороны на Python весь код будет выглядеть примерно так без никаких экстеншенов вообще и ответы на все вопросы выше ясны сразу же:
for trainData, color in zip([trainData1, trainData2, trainData3], colors[:3]):
for x, y in trainData[:trainSampleCount // 3]:
cv2.circle(img, (x, y), 2, color)