我试图删除数组值,其差异是MATLAB中该数组的一个成员。例如,如果我有一个定义为
x = [1 2 4 3 7];我想删除2,因为它可以从4-2实现。我也想删除4,因为它可以从7-3实现。然后我想将这些值(分别为2和4)存储到一个矩阵中。后者很容易。我只是很难做这个检查总结。
我知道你可以用
ismember(*any 2 differences*),x(:))若要检查数组中是否存在差异,请执行以下操作。但是,我不知道如何编码我的函数来尝试元素减法的所有组合。
发布于 2015-09-13 05:45:15
似乎是一个很好的使用bsxfun的装置-
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))样本运行-
>> 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是无法删除的。
发布于 2015-09-13 05:31:47
你可以这样做:
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行。
https://stackoverflow.com/questions/32546495
复制相似问题