我在数组中有几个数字,我想找到差异 在每一个之间并按最低结果排序(我不想重复项目)。我尝试使用命令“perms”,因为它获得了所有的排列
v = [120;124;130];
p = perms(v)
但它似乎没有按照我想要的方式工作。有没有人有任何其他建议
实施例: 我有3个数字 a = [120,124,130] (请注意可能有数百个数字),它会找到数字之间的差异,然后按结果排序。计算结果如下所示。
124-120 =4
130-124 =6
130-120 =10
所以最终的数组b看起来就像下面的数组
b=
[124 120 4
130 124 6
130 120 10]
PS:我正在使用octave 3.8.1,就像matlab
答案 0 :(得分:0)
我们可以使用PDIST函数计算成对距离,然后使用ndgrid
和tril
的组合来获取向量原始值的索引。最后,我们根据距离进行排序:
v = [120;124;130];
D = pdist(v, 'cityblock');
[a,b] = ndgrid(1:numel(v), 1:numel(v));
out = sortrows([v(nonzeros(tril(a,-1))) v(nonzeros(tril(b,-1))) D(:)], 3)
答案 1 :(得分:0)
对于那些无法加载统计工具箱的人,谢谢@Amro
v = [120;124.6;130];
%taken out from pdist.m from statistics package
order = nchoosek(1:rows(v),2);
Xi = order(:,1);
Yi = order(:,2);
X = v';
d = X(:,Xi) - X(:,Yi);
y = norm (d, "cols");
[a,b] = ndgrid(1:numel(v), 1:numel(v));
out = sortrows([v(nonzeros(tril(a,-1))) v(nonzeros(tril(b,-1))) y(:)], 3)
out=
124.6000 120.0000 4.6000
130.0000 124.6000 5.4000
130.0000 120.0000 10.0000