Selezionare tutti gli elementi, tranne uno in un vettore

La mia domanda è molto simile a questo ma non riesco esattamente come applicare la risposta al mio problema.

Sto loop attraverso un vettore con una variabile k e desidera selezionare l’intero vettore, tranne il singolo valore di indice k.

Qualche idea?

for k = 1:length(vector)

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

end
InformationsquelleAutor Matteo | 2013-10-25

 

6 Replies
  1. 9

    vector([1:k-1 k+1:end]) farà. A seconda delle altre operazioni, ci può essere un modo migliore per gestire questo, però.

    Per completezza, se si desidera rimuovere un elemento, non è necessario andare vector = vector([1:k-1 k+1:end]) percorso, è possibile utilizzare vector(k)=[];

    • se k = 1 funzionerà ancora?
    • Sì, lo fa
    • Inserire [1:0 2:5] e vedere se uscite di ciò che si desidera. 😉 (Il end parola chiave non funziona quando non cerca di indice di un vettore.)
    • Grazie per il vostro aiuto! Funziona perfettamente, e grazie anche per il suggerimento sul vector(k)=[];
    • Voglio dire che non è possibile verificare che cosa [1:k-1 k+1:end] vi darò alcuni k da solo, al di fuori vector([1:k-1 k+1:end]), quindi ho usato 5 come un termine fisso nell’esempio di test che 1:0 potrebbe essere.
  2. 27

    Un’altra alternativa senza setdiff() è

    vector(1:end ~= k)
    • Buona chiamata. Logiche di indicizzazione di solito è preferibile e questo funziona bene se si dispone di uno scalare k come nella domanda.
  3. 6

    Solo per divertimento, ecco un modo interessante con setdiff:

    vector(setdiff(1:end,k))

    La cosa interessante di questo, oltre all’uso di setdiff, vi chiederete? Guardare il posizionamento di end. MATLAB è fine parola chiave si traduce per l’ultimo indice di vector in questo contesto, anche come argomento di una funzione, chiamata piuttosto che direttamente utilizzato con paren (vector‘s () operatore). Non c’è bisogno di utilizzare numel(vector). Mettere un altro modo,

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

    Che non è del tutto evidente IMO, ma può tornare utile in molte situazioni, così ho pensato di sottolineare questo.

  4. 2

    Molto semplice:

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

    Questo funziona anche se k è il primo o l’ultimo elemento.

  5. 2
    %create a logic vector of same size:
    l=ones(size(vector))==1;
    l(k)=false;
    vector(l);
    • Grazie per la tua risposta! funziona, ma credo che continuerò con gli altri con la causa che coinvolgono meno variabili.
  6. 0

    Un altro modo per farlo che permette di escludere più indici in una volta (o un singolo indice… in pratica è robusto per consentire l’) è:

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

    Funziona proprio come setdiff davvero, ma costruisce una logica maschera invece di un elenco di indici espliciti.

Lascia un commento