首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算唯一元素对之间的差异- MATLAB

计算唯一元素对之间的差异- MATLAB
EN

Stack Overflow用户
提问于 2015-08-01 18:03:27
回答 1查看 60关注 0票数 2

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

代码语言:javascript
复制
A=
10   1
15   1
5    2
10   2
18   2
20   2
24   3
30   3
35   3

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

指数1

代码语言:javascript
复制
5 (15-10)

说明:距离在10到15之间。不取15到10之间的距离,因为这不是唯一的,而且已经计算过了。

指数2

代码语言:javascript
复制
5 (10-5)
13 (18-5)
15 (20-5)
8 (18-10)
10 (20-10)
2 (20-18)

指数3

代码语言:javascript
复制
6 (30-24)
11 (35-24)
5 (35-30)

这些结果只需放在一个矩阵中:

代码语言:javascript
复制
diff=
5
5
13
15
8
10
2
6
11
5

有没有一种简洁的方法可以做到这一点,而不需要复杂的for循环和if语句的混合?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-01 18:21:25

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

代码语言:javascript
复制
result = accumarray(A(:,2), A(:,1), [], @(x) {unique(pdist(x))});

在您的示例中,这将给出

代码语言:javascript
复制
result{1} =
     5
result{2} =
     2     5     8    10    13    15
result{3} =
     5     6    11

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

代码语言:javascript
复制
result = accumarray(A(:,2), A(:,1), [], @(x) {unique(nonzeros(abs(bsxfun(@minus,x,x.'))))});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31764647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档