2011-03-09 2 views
0

Je souhaite supprimer efficacement un grand nombre de données au début d'une matrice de dimension 2 * n. La matrice ressemble à ceci:Suppression efficace des éléments de la matrice

x1 x2 
x3 x4 
... 
... 

Je veux supprimer toutes les lignes qui ont le premier élément d'une ligne qui est plus petit que certains nombre et arrêter quand une ligne n'est pas plus petit (les éléments sont dans l'ordre numérique)

ce que je fais en ce moment est lent:

while 1 
    if list{i}(1) <= someNumber 
     list{i}(1,:) = [] 
    else 
     break; 
    end 
end 

Il doit y avoir une belle façon de le faire rapidement Matlab?

Merci.

Répondre

2

Une façon est de simplement comparer l'ensemble de la première colonne en une seule fois puis supprimer, à savoir

rows2delete = list{i}(:,1) <= someNumber; %# creates logical array with 1 for deletion 
list{i}(rows2delete,:) = []; %# delete some rows, all corresponding cols 
+0

Impressionnant Jonas, qui est tout ce que je avais besoin. Je savais qu'il devait y avoir un bon moyen pour que MatLab le fasse mais ce n'est pas une de mes langues :). Acceptera quand le temps minimum est passé. Merci .. ce rasage de beaucoup de temps. – ale

+0

@ vivid-colours: btw, si vous avez besoin de faire ceci pour toutes les cellules de la liste, vous pouvez utiliser 'cellfun' pour un one-liner:' list = cellfun (@ (x) x (x (:, 1) > someNumber, :), list, 'uniformOutput', false) '. Ceci conserve, pour chaque tableau dans 'list', les lignes où la première valeur est plus grande que' someNumber'. – Jonas

+0

Merci pour l'aide .. m'a vraiment aidé. Je viens de poster un problème similaire qui pourrait vous intéresser. J'ai besoin d'apprendre à faire ce genre de choses mieux dans MATLAB. – ale

Questions connexes