我正在使用Matlab R2014a,我想知道数组中的数字是否彼此不同。当然,我可以在一个循环中做到这一点,但我认为有更好的方法(也就是Matlab函数)来做到这一点。
示例:
如果
A=[4 6 8 3] => msgbox ('Elements are different')
如果
A=[4 4 8 3] => msgbox ('Elements are not different').
是否有任何功能可以做到这一点,或者我需要通过暴力来做这件事?
答案 0 :(得分:5)
以下是unique
的一些替代方案。
以下任一项的结果为true
,A
的所有元素都是不同的,否则为false
。
排序元素并查看某些连续元素是否相等:
result = all(diff(sort(A(:)))~=0);
计算除自身对之外的所有元素对的距离,并查看是否为零:
result = ~any(pdist(A(:))==0);
比较每对元素,包括自我对,看看巧合的数量是否只是自我对的数量:
result = nnz(bsxfun(@eq, A(:), A(:).'))==numel(A);
使用ismember
(第二个输出)确定A
的最低索引元素,该元素等于A
的每个元素:
[~, jj] = ismember(A,A);
result = all(jj==(1:numel(A)));
答案 1 :(得分:4)
我会用
if numel(A) == numel(unique(A))
msgbox ('Elements are different')
else
msgbox ('Elements are not different')
end
答案 2 :(得分:4)
这是否满足您的需求?
isequal(numel(A), numel(unique(A)))