我正在嘗試使用diffset,集合是穩定的,但我得到一個Unknown flag.
錯誤。我也試過sorted
,但同樣的錯誤適用。有不同的語法嗎?未知的標誌錯誤diffset'stable'
我的代碼:
C = setdiff([4 1 3 2],[2 1],'sorted')
我用Matlab 7.10.0 R2010a版本
我正在嘗試使用diffset,集合是穩定的,但我得到一個Unknown flag.
錯誤。我也試過sorted
,但同樣的錯誤適用。有不同的語法嗎?未知的標誌錯誤diffset'stable'
我的代碼:
C = setdiff([4 1 3 2],[2 1],'sorted')
我用Matlab 7.10.0 R2010a版本
如前所述,這可能是一個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))
這將產生:
正是我需要:),一個側面的問題:爲什麼介紹穩定呢?有更快的實施? – 2013-03-11 22:20:14
@BartlomiejLewandowski我不這麼認爲,它只是簡短的語法。在你的例子中'setdiff'也可以爲你節省臨時變量。 – 2013-03-11 22:45:36
這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
請檢查您的matlab版本。這些標誌僅在最近才引入。 – Shai 2013-03-11 21:18:51