计算独特元素对之间的差异 - MATLAB

时间:2015-08-01 18:03:28

标签: matlab

我有一个包含两列的矩阵 - 位置A(:,1)和索引A(:,2)

A=
10   1
15   1
5    2
10   2
18   2
20   2
24   3
30   3
35   3

我需要能够计算每个元素与每个索引块中所有其他元素之间的距离(位置值之间) - 省略非唯一的冗余对。上述示例的所需输出为:

索引1

5 (15-10)

说明:10到15之间的距离。不考虑15到10之间的距离,因为这不是唯一的并且已经计算过。

索引2

5 (10-5)
13 (18-5)
15 (20-5)
8 (18-10)
10 (20-10)
2 (20-18)

索引3

6 (30-24)
11 (35-24)
5 (35-30)

这些结果可以放在一个矩阵中:

diff=
5
5
13
15
8
10
2
6
11
5

如果没有for循环和if语句的复杂混合,是否有一种简洁的方法可以做到这一点?

1 个答案:

答案 0 :(得分:3)

这可以使用带有匿名函数的accumarray在一行中完成:

result = accumarray(A(:,2), A(:,1), [], @(x) {unique(pdist(x))});

在你的例子中,这给出了

result{1} =
     5
result{2} =
     2     5     8    10    13    15
result{3} =
     5     6    11

这使用统计工具箱中的函数pdist。如果你没有,你可以做到

result = accumarray(A(:,2), A(:,1), [], @(x) {unique(nonzeros(abs(bsxfun(@minus,x,x.'))))});