セットが安定している状態で diffset を使用しようとしていますが、Unknown flag.
エラーが発生します。も試してみましたsorted
が、同じエラーが発生します。別の構文はありますか?
私のコード:
C = setdiff([4 1 3 2],[2 1],'sorted')
私はMatlab 7.10.0 r2010aを使用しています
前述のとおり、これはおそらく MATLAB のバージョンの問題です。の動作はsetdiff
最後のバージョンで変更されており、オンライン ドキュメントは MATLAB の最新の 2013a リリースのみをカバーしているため、これが混乱の原因となる可能性があります。
とはいえ、以前の MATLAB リリースのドキュメントもオンラインで入手できます(ただし、MathWorks アカウントが必要であることに注意してください)。いずれにせよ、MATLAB にはsetdiff
コマンドの実装が古いようです。次の方法で確認できます。
help setdiff
とにかく、 の古い実装の動作は、フラグsetOrderが に設定されてsetdiff
いる場合の新しい実装の動作に似ています。フラグsetOrderが に設定されているときの動作を模倣したい場合は、代わりに次のように使用できます。'sorted'
'stable'
ismember
A = [4 1 3 2];
B = [2 1];
C = A(~ismember(A, B))
これにより、次の結果が得られます。
C =
4 3
この投稿は実装を提供します:
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