Select all elements except one in a vector

后端 未结 6 804
旧巷少年郎
旧巷少年郎 2021-01-04 02:47

My question is very similar to this one but I can\'t manage exactly how to apply that answer to my problem.

I am looping through a vector with a variable k

相关标签:
6条回答
  • 2021-01-04 03:22

    Just for fun, here's an interesting way with setdiff:

    vector(setdiff(1:end,k))
    

    What's interesting about this, besides the use of setdiff, you ask? Look at the placement of end. MATLAB's end keyword translates to the last index of vector in this context, even as an argument to a function call rather than directly used with paren (vector's () operator). No need to use numel(vector). Put another way,

    >> 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.
    

    That is not completely obvious IMO, but it can come in handy in many situations, so I thought I would point this out.

    0 讨论(0)
  • 2021-01-04 03:23

    vector([1:k-1 k+1:end]) will do. Depending on the other operations, there may be a better way to handle this, though.

    For completeness, if you want to remove one element, you do not need to go the vector = vector([1:k-1 k+1:end]) route, you can use vector(k)=[];

    0 讨论(0)
  • 2021-01-04 03:29

    Very easy:

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

    This works even if k is the first or last element.

    0 讨论(0)
  • 2021-01-04 03:30

    Another alternative without setdiff() is

    vector(1:end ~= k)
    
    0 讨论(0)
  • 2021-01-04 03:30
    %create a logic vector of same size:
    l=ones(size(vector))==1;
    l(k)=false;
    vector(l);
    
    0 讨论(0)
  • 2021-01-04 03:33

    Another way you can do this which allows you to exclude multiple indices at once (or a single index... basically it's robust to allow either) is:

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

    Works just like setdiff really, but builds a logical mask instead of a list of explicit indices.

    0 讨论(0)
提交回复
热议问题