如何在Matlab中确定数组中的所有值是否都不同

时间:2015-06-08 13:46:45

标签: arrays matlab

我正在使用Matlab R2014a,我想知道数组中的数字是否彼此不同。当然,我可以在一个循环中做到这一点,但我认为有更好的方法(也就是Matlab函数)来做到这一点。

示例:

如果

A=[4 6 8 3] => msgbox ('Elements are different')

如果

A=[4 4 8 3] => msgbox ('Elements are not different').

是否有任何功能可以做到这一点,或者我需要通过暴力来做这件事?

3 个答案:

答案 0 :(得分:5)

以下是unique的一些替代方案。

以下任一项的结果为trueA的所有元素都是不同的,否则为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)))