2013-03-11 10 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 2013-03-11 21:18:51

回答

2

如前所述,這可能是一個MATLAB版本的問題。 setdiff的行爲在最新版本中已經發生變化,online documentation僅涵蓋了MATLAB最新的2013a版本,因此這可能是您混淆的一個可能原因。

也就是說,之前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)) 

這將產生:

​​
+1

正是我需要:),一個側面的問題:爲什麼介紹穩定呢?有更快的實施? – 2013-03-11 22:20:14

+0

@BartlomiejLewandowski我不這麼認爲,它只是簡短的語法。在你的例子中'setdiff'也可以爲你節省臨時變量。 – 2013-03-11 22:45:36

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