2013-03-11 3 views
0

Я пытаюсь использовать diffset, с установленным стабильным, но я получаю ошибку Unknown flag.. Я также пробовал его с sorted, но та же ошибка. Есть ли другой синтаксис?Неизвестный флаг ошибка diffset 'stable'

Мой код:

C = setdiff([4 1 3 2],[2 1],'sorted') 

Я использую Matlab 7.10.0 r2010a

+1

, пожалуйста, проверьте свою версию matlab. эти флаги были введены совсем недавно. – Shai

ответ

2

Как уже упоминалось, это, вероятно, версия выпуск MATLAB. Поведение setdiff изменилось в последних версиях, а online documentation охватывает только последний выпуск 2013 года MATLAB, так что это может быть возможной причиной вашего замешательства.

При этом документация для предыдущих выпусков MATLAB составляет also available online (обратите внимание, что для этого требуется учетная запись MathWorks). В любом случае, ваш MATLAB, кажется, старшее выполнение команды setdiff, и вы можете убедиться в том, что с помощью:

help setdiff 

Во всяком случае, поведение старой реализации setdiff похоже на поведение новой реализации когда флаг setOrder установлен в 'sorted'. Если вы хотите, чтобы имитировать поведение, когда флаг SetOrder установлен в 'stable', вы можете использовать ismember вместо этого, например:

A = [4 1 3 2]; 
B = [2 1]; 
C = A(~ismember(A, B)) 

, который дает:

C = 
    4  3 
+1

именно то, что мне нужно :), побочный вопрос: зачем вводить стабильный то? есть ли более быстрая реализация? –

+0

@BartlomiejLewandowski Я так не думаю, это просто более короткий синтаксис. В вашем примере 'setdiff' также может сохранить временные переменные. –

0

Этот post предлагает реализацию:

function [res]=setdiff_stable(a,b) 
    if(size(a,1)>size(a,2)) 
     a=a'; 
    end 
    if(size(b,1)>size(b,2)) 
     b=b'; 
    end 
    res=a(sum(repmat(a,length(b),1)-repmat(b',1,length(a))==0,1)==0); 
end 
Смежные вопросы