首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移除任何两个数组值,其差异是该数组的一个成员。

移除任何两个数组值,其差异是该数组的一个成员。
EN

Stack Overflow用户
提问于 2015-09-13 05:04:33
回答 2查看 57关注 0票数 1

我试图删除数组值,其差异是MATLAB中该数组的一个成员。例如,如果我有一个定义为

代码语言:javascript
复制
x = [1 2 4 3 7];

我想删除2,因为它可以从4-2实现。我也想删除4,因为它可以从7-3实现。然后我想将这些值(分别为2和4)存储到一个矩阵中。后者很容易。我只是很难做这个检查总结。

我知道你可以用

代码语言:javascript
复制
ismember(*any 2 differences*),x(:))

若要检查数组中是否存在差异,请执行以下操作。但是,我不知道如何编码我的函数来尝试元素减法的所有组合。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-13 05:45:15

似乎是一个很好的使用bsxfun的装置-

代码语言:javascript
复制
abs_diffs = abs(bsxfun(@minus,x(:),x(:).'))  %//'

unq_abs_diffs = unique(abs_diffs)

out = x(~any(bsxfun(@eq,unq_abs_diffs(:),x(:).'),1))   %//'
%// OR x(~ismember(x,unq_abs_diffs))

样本运行-

代码语言:javascript
复制
>> x
x =
     1     2     4     3     7
>> abs_diffs = abs(bsxfun(@minus,x(:),x(:).'))
abs_diffs =
     0     1     3     2     6
     1     0     2     1     5
     3     2     0     1     3
     2     1     1     0     4
     6     5     3     4     0
>> unq_abs_diffs = unique(abs_diffs)
unq_abs_diffs =
     0
     1
     2
     3
     4
     5
     6
>> out = x(~any(bsxfun(@eq,unq_abs_diffs(:),x(:).'),1))
out =
     7

因此,在[1 2 4 3 7]中,似乎只有7是无法删除的。

票数 1
EN

Stack Overflow用户

发布于 2015-09-13 05:31:47

你可以这样做:

代码语言:javascript
复制
n = length(a);
differences = meshgrid(a,a) - meshgrid(a,a)'; % get differences between elements
differences(1:n+1:n*n) = []; % remove diagonal
a(ismember(a,differences)) = []; % remove elements in differences

我假设你只想要不同元素之间的区别。如果希望允许a元素与其本身之间的差异,则删除第3行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32546495

复制
相关文章

相似问题

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