Проверьте scipy.clustering для начала. Поиск по ключевым словам может затем дать много информации о различных алгоритмах, которые там используются. Кластеризация - это большая область, с большим количеством исследований и практических применений, а также с рядом простых подходов, которые, как было найдено, работают достаточно хорошо, поэтому вы можете не захотеть начинать с собственного.
При этом алгоритмы кластеризации, как правило, довольно легко программировать, и, если вы действительно хотите запрограммировать свое собственное, k-means и агломерационная кластеризация являются одними из фаворитов, которые можно быстро выполнить.
Наконец, я не уверен, что ваше представление о ровно N кластерах, ограниченных определенным размером, является самосогласованным, но оно зависит от того, что именно вы подразумеваете под «размером» и «кластером» (являются ли отдельные точки кластер?).
Обновление:
Следуя комментариям ОП ниже, я думаю, что стандартные методы кластеризации не дадут оптимального решения этой проблемы, потому что нет непрерывной метрики для «расстояния» между точками, которое можно оптимизировать. Хотя они могут дать хорошее решение или приближение в некоторых случаях. Для кластерного подхода я бы попробовал k-means, так как предпосылка этого метода имеет фиксированное значение N.
Но вместо кластеризации это больше похоже на проблему покрытия ( т.е. , у вас есть N прямоугольников фиксированного размера, и вы пытаетесь покрыть все точки ими ), но я не знаю много об этом, поэтому я оставлю это кому-то еще.