Это одна из тех (очень распространенных) ситуаций, когда чем больше мы знаем о ваших данных и приложении, тем лучше мы можем помочь. В отсутствие более качественной информации, чем вы предоставляете, и в духе разоблачения слабости ответов, подобных этому, в это отсутствие, вот пара предложений, которые вы можете отклонить.
Одной подходящей структурой данных для операций над множествами является набор битов, который представляет собой набор длины, равный количеству элементов базового юниверса вещей, в котором каждый бит включен или выключен в соответствии с членством вещей -задавать). Вы можете реализовать это в Matlab как минимум двумя способами:
a) (легко, но, возможно, занимает слишком много места): определите матрицу с количеством столбцов, равным количеству точек в ваших данных, и одной строкой для каждого кластера. Установите для значения (cluster, point) значение true, если точка является членом кластера. Операции над множествами затем определяются векторными операциями. Я не имею понятия об относительной (временной) эффективности setdiff по сравнению с rowA == rowB.
b) (более сложный): фактически представляют кластеры с помощью наборов битов. Конечно, вам придется использовать возможности Matlab, но боль может стоить выигрыша. Предположим, что ваш юниверс состоит из 1024 точек, тогда вам понадобится массив из 16 значений uint64 для представления набора битов для каждого кластера. Наличие, скажем, точки 563 в кластере требует, чтобы для набора битов, представляющего этот кластер, был установлен бит 563 (который, вероятно, является битом 51 в 9-м элементе набора) равным 1.
И, возможно, мне следовало начать с написания, что я не думаю, что это проблема хеширования, это проблема определенного типа. Да, вы можете использовать хеш, но тогда вам придется программировать ограничения использования отвертки на гвозде (выберите предпочитаемую аналогию).