Вы можете использовать функцию NCHOOSEK , чтобы сгенерировать набор индексов в X
и построить свою матрицу следующим образом:
>> X = [100 100; 0 100; 100 0; 500 400; 300 600]; %# Your sample data
>> D = pdist(X,'euclidean')' %'# Euclidean distance, with result transposed
D =
100.0000 %# Note that I get different results than your example!
100.0000
500.0000
538.5165
141.4214
583.0952
583.0952
565.6854
632.4555
282.8427
>> index = nchoosek(1:size(X,1),2);
>> M = [D X(index(:,1),:) X(index(:,2),:)] %# [Distance X1 Y1 X2 Y2]
M =
100.0000 100.0000 100.0000 0 100.0000
100.0000 100.0000 100.0000 100.0000 0
500.0000 100.0000 100.0000 500.0000 400.0000
538.5165 100.0000 100.0000 300.0000 600.0000
141.4214 0 100.0000 100.0000 0
583.0952 0 100.0000 500.0000 400.0000
583.0952 0 100.0000 300.0000 600.0000
565.6854 100.0000 0 500.0000 400.0000
632.4555 100.0000 0 300.0000 600.0000
282.8427 500.0000 400.0000 300.0000 600.0000
Обратите внимание, что функция NCHOOSEK будет практическим решением, только если число столбцов в X
меньше, чем около 15.
edit : поскольку pdist
выбирает пары точек, аргумент секунд для nchoosek
должен быть просто 2
. Он не зависит от размерности ваших данных. Это также делает примечание на предыдущей строке устаревшим. (извините за редактирование таким образом, не хватает представителя, чтобы добавить комментарий, но мне очень понравился этот ответ и я хотел его исправить) - Пол