Matlab delete values

2 visualizzazioni (ultimi 30 giorni)
athpapa -
athpapa - il 8 Mar 2011
Hello,
I have a table: A=[2 5 5 0] and I use this function to sort it in descend order: [C, Index] = sort(A) and the result: C=[5 5 2 0]. Then I use this: t=A(Index(1)); A(A==t)=[]; to find and delete the value of table A which match the first value of table C. But when I have same values as in my example (5, 5) it deletes them both. I want to delete only one value each time. I mean I want A=[2 5 0] and so C become: C=[5 2 0]. What is the right function? I want this function to work for random arrays and not only for the example!
Thank you..
  1 Commento
Walter Roberson
Walter Roberson il 8 Mar 2011
Note: to sort in descending order, you need
[C, Index] = sort(A,'descend');

Accedi per commentare.

Risposta accettata

Matt Tearle
Matt Tearle il 8 Mar 2011
Much as I love logical indexing, here's a case for using find with the number and 'first' or 'last' option:
idx = find(A==t,1,'first');
A(idx) = [];
That said, it seems like you're trying to remove the maximum (or minimum) value, but only one. In which case, why not simplify a bit:
idx = find(A==max(A),1,'first');
A(idx) = [];
Or even just use the fact that max will return a single index for the maximum value:
[~,idx] = max(A);
A(idx) = [];

Più risposte (1)

Matt Fig
Matt Fig il 8 Mar 2011
A(find(A==T,1,'first')) = [];
Or, you could just use Index directly:
A(Index(1)) = []
And avoid the call to FIND and/or any comparisons.

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by