[英]Removing any two array values whose difference is a member of that array
我正在嘗試刪除其值是MATLAB中該數組的成員的數組值。 例如,如果我有一個定義為的數組
x = [1 2 4 3 7];
我想刪除2,因為它可以從4-2實現。我也想刪除4,因為它可以從7-3實現。然后,我想將這些值(分別為2和4)存儲到矩陣。 后者很容易。 我很難進行此檢查器的求和。
我知道你可以用
ismember(*any 2 differences*),x(:))
檢查差異是否在數組中。 但是,我不知道如何編碼我的函數來嘗試元素減法的所有組合。
似乎是使用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
無法刪除。
您可以這樣做:
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
元素與其自身之間的差異,請刪除第三行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.