选择向量中除一个之外的所有元素

时间:2013-10-25 17:43:09

标签: matlab vector indexing

我的问题与this one非常相似,但我无法确定如何将答案应用于我的问题。

我循环遍历带有变量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

6 个答案:

答案 0 :(得分:27)

没有setdiff()的另一种选择是

vector(1:end ~= k)

答案 1 :(得分:10)

vector([1:k-1 k+1:end])会这样做。但是,根据其他操作,可能有更好的方法来处理这个问题。

为了完整性,如果您要删除一个元素,则无需转到vector = vector([1:k-1 k+1:end])路线,可以使用vector(k)=[];

答案 2 :(得分:6)

只是为了好玩,这是setdiff的一个有趣的方式:

vector(setdiff(1:end,k))

除了使用setdiff之外,你有什么问题呢?查看end的展示位置。 MATLAB的end keyword转换为此上下文中vector的最后一个索引,即使作为函数调用的参数而不是直接用于parenvector的{​​{1}运营商)。无需使用()。换句话说,

numel(vector)

这并不是完全明显的IMO,但它在许多情况下都会派上用场,所以我想我会指出这一点。

答案 3 :(得分:2)

非常简单:

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

即使k是第一个或最后一个元素,这也有效。

答案 4 :(得分:2)

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

答案 5 :(得分:0)

执行此操作的另一种方法是,允许您一次排除多个索引(或单个索引...基本上允许任何一个索引都是健壮的):

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

确实像setdiff一样工作,但是建立逻辑掩码而不是显式索引列表。