Arrays 删除差异为该数组成员的任意两个数组值
我试图删除数组值,其差值是MATLAB中该数组的一个成员。例如,如果我有一个数组定义为Arrays 删除差异为该数组成员的任意两个数组值,arrays,matlab,Arrays,Matlab,我试图删除数组值,其差值是MATLAB中该数组的一个成员。例如,如果我有一个数组定义为 x = [1 2 4 3 7]; 我想删除2,因为它可以从4-2实现。我还想删除4,因为它可以从7-3实现。然后我想将这些值(分别为2和4)存储到一个矩阵中。后者很容易。我只是很难做这个求和的检查 我知道你可以用 ismember(*any 2 differences*),x(:)) 检查数组中是否存在差异。然而,我不知道如何编写我的函数来尝试所有元素减法的组合 您可以这样做: n=长度(a); 差异=
x = [1 2 4 3 7];
我想删除2,因为它可以从4-2实现。我还想删除4,因为它可以从7-3实现。然后我想将这些值(分别为2和4)存储到一个矩阵中。后者很容易。我只是很难做这个求和的检查
我知道你可以用
ismember(*any 2 differences*),x(:))
检查数组中是否存在差异。然而,我不知道如何编写我的函数来尝试所有元素减法的组合 您可以这样做:
n=长度(a);
差异=网格网格(a,a)-网格网格(a,a);%获取元素之间的差异
差异(1:n+1:n*n)=[];%删除对角线
a(成员(a,差异))=[];%删除差异中的元素
我假设您只想要独特元素之间的差异。如果要允许
a
的元素与自身之间存在差异,请删除第三行。似乎是一个很好的设置-
样本运行-
>> 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
,因为2-1=1
?另外,7-4=3
,那么是否也删除3
?
>> 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