我有一个矩阵,它包含两列位置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语句的混合?
发布于 2015-08-01 18:21:25
这可以使用带有匿名函数的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.'))))});https://stackoverflow.com/questions/31764647
复制相似问题