16

私の質問はこれと非常に似ていますが、その答えを私の問題に適用する方法を正確に管理できません。

変数を使用してベクトルをループしており、kindex の単一の値を除くベクトル全体を選択したいと考えていますk

何か案が?

for k = 1:length(vector)

   newVector = vector( exluding index k);    <---- what mask should I use? 
   % other operations to do with the newVector

end
4

6 に答える 6

30

setdiff()のない別の代替手段は

vector(1:end ~= k)
于 2013-10-25T22:29:41.600 に答える
10

vector([1:k-1 k+1:end])しましょう。ただし、他の操作によっては、これを処理するためのより良い方法がある場合があります。

完全を期すために、1 つの要素を削除したい場合は、vector = vector([1:k-1 k+1:end])ルートに行く必要はありません。使用できます。vector(k)=[];

于 2013-10-25T17:47:37.287 に答える
7

楽しみのために、ここに興味深い方法がありsetdiffます:

vector(setdiff(1:end,k))

の使用以外に、これについて興味深い点は何setdiffですか? の配置を見てくださいend。MATLAB のendキーワードは、 (の演算子)vectorで直接使用されるのではなく、関数呼び出しの引数としても、このコンテキストの の最後のインデックスに変換されます。使用する必要はありません。別の言い方をすれば、parenvector()numel(vector)

>> vector=1:10;
>> k=6;
>> vector(setdiff(1:end,k))
ans =
     1     2     3     4     5     7     8     9    10
>> setdiff(1:end,k)
Error using setdiff (line 81)
Not enough input arguments.

これは完全に明白な IMO ではありませんが、多くの状況で役立つ可能性があるため、これを指摘したいと思います。

于 2013-10-25T21:06:33.957 に答える
2

非常に簡単:

newVector = vector([1:k-1 k+1:end]);

これkは、 が最初または最後の要素であっても機能します。

于 2013-10-25T17:47:44.653 に答える