假设我有4个地点,x = rand(4,1)
。对于每个位置,我想计算到其他3个位置d = pdist(x, 'euclidean')
的距离。这给了我6个独特的距离,例如。 12,13,14,23,24,34。
如何分离这些组合,以便从相应的位置1,2,3到其他位置获得所有距离。所以结果应该是这样的:
[1 2 3]
[4 5]
[6]
答案 0 :(得分:1)
也许squareform
就是你所追求的。它将所有距离解包成方形对称矩阵:
>> x = rand(4,1)
x =
0.5290
0.5673
0.4487
0.9872
>> d = pdist(x, 'euclidean')
d =
0.0383 0.0802 0.4582 0.1186 0.4199 0.5384
>> D = squareform(d)
D =
0 0.0383 0.0802 0.4582
0.0383 0 0.1186 0.4199
0.0802 0.1186 0 0.5384
0.4582 0.4199 0.5384 0
所以例如D(2,3)
(或D(3,2)
)是从第2点到第3点的距离。
答案 1 :(得分:0)
使用所有6种组合idx = [1 2 3 4 5 6]
创建索引。为每个循环(idx(1:Num-n) = []
)分别删除此索引中的前3个,2个,1个元素。
Num = 4;
idx = 1:nchoosek(Num,2); % index of all combinations
for n = 1:Num-1 % loop through all except last
idx(1:Num-n) % print
idx(1:Num-n) = []; % remove the first elements in index
end
这将给出以下结果
ans = 1 2 3
ans = 4 5
ans = 6