Подтвердить что ты не робот

Выберите все элементы, кроме одного в векторе

Мой вопрос очень похож на этот, но я не могу точно определить, как применить этот ответ к моей проблеме.

Я перебираю вектор с переменной k и хочу выделить весь вектор, кроме единственного значения, в индексе k.

Любая идея?

for k = 1:length(vector)

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

end
4b9b3361

Ответ 1

vector([1:k-1 k+1:end]). В зависимости от других операций может быть лучший способ справиться с этим, однако.

Для полноты, если вы хотите удалить один элемент, вам не нужно идти по маршруту vector = vector([1:k-1 k+1:end]), вы можете использовать vector(k)=[];

Ответ 2

Другая альтернатива без setdiff() -

vector(1:end ~= k)

Ответ 3

Просто ради интереса, вот интересный способ с setdiff:

vector(setdiff(1:end,k))

Что интересного в этом, кроме использования setdiff, спросите вы? Посмотрите на размещение end. MATLAB end ключевого слово переводится последним индекс vector в этом контексте, даже в качестве аргумента вызова функции, а не непосредственно использоваться с paren (vector () оператором). Не нужно использовать 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, но это может пригодиться во многих ситуациях, поэтому я подумал, что я бы указал на это.

Ответ 4

Очень просто:

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

Это работает, даже если k - это первый или последний элемент.

Ответ 5

%create a logic vector of same size:
l=ones(size(vector))==1;
l(k)=false;
vector(l);

Ответ 6

Вы можете сделать это еще одним способом, который позволяет исключить сразу несколько индексов (или один индекс... в основном это допустимо):

newVector = oldVector(~ismember(1:end,k))

Работает так же, как и setdiff, но создает список логических масок вместо списка явных индексов.