Вместо использования pdist2
, который находит расстояния между точками в двух списках, используйте pdist
. pdist
берет все точки в одном списке и находит расстояние между каждой парой.
В вашем примере s.Centroid
дает список точек через запятую, поэтому нам нужно привести его в массив точек, используя vertcat
:
point_list = vertcat(s.Centroid);
Теперь мы можем передать этот список на pdist
:
dist_list = pdist(point_list);
pdist
возвращает список расстояний от центроида i
до центроида j
, такой что i < j
:
{1->2}, {1->3}, {1->4}, ... {1->n}, {2->3}, {2->4}, ..., {2->n}, {3->4}, etc.
В вашем примере с 28 центроидами это даст вам 378 расстояний.
Если вы хотите, чтобы в матричной форме вместо элемента (i,j)
было расстояние от центроида i
до центроида j
, вы можете использовать squareform
:
dist_mat = squareform(dist_list);
Для 28 центроидов это даст вам полную матрицу расстояний 28x28.