diviser une matrice selon une colonne avec matlab.
A = [1,4,2,5,10
2,4,5,6,2
2,1,5,6,10
2,3,5,4,2]
Et j'ai envie de le diviser en deux de la matrice par la dernière colonne
A ->B et C
B = [1,4,2,5,10
2,1,5,6,10]
C = [2,4,5,6,2
2,3,5,4,2]
Aussi, cette méthode pourrait être appliquée à une grande matrice, à l'instar de la matrice 100*22 en fonction de la dernière valeur de la colonne dans 9 groupes par matlab.
Pouvez-vous expliquer plus en détail ce que vous essayez d'atteindre?
OriginalL'auteur Fan Phill | 2013-08-29
Vous devez vous connecter pour publier un commentaire.
Utilisation logique d'indexation
retourne
EDIT: En réponse à Dan commentaire ici est l'extension pour le cas général
ou de façon plus compacte
donc pour
vous obtenez les matrices dans les éléments de matrice de cellules de
B
Il a juste besoin d'une boucle for à généraliser. Je l'ai ajouté à la réponse.
C'est mieux donne le résultat identique à la mienne, mais dans ce cas, la méthode de boucle semble plus rapide que la vectorisé approche! +1
OriginalL'auteur Mohsen Nosratinia
Ici est une approche générale qui fonctionne sur n'importe quel nombre de chiffres de la dernière colonne sur toute la taille de la matrice:
Premier tri par la dernière colonne (beaucoup de façons de le faire, je ne sais pas si c'est le meilleur ou pas)
Puis créer un vecteur de combien de lignes de le même nombre de figurer dans ce dernier col (c'est à dire le nombre de lignes par groupe)
Remarque que pour mon exemple, des données
rowDist
sera égal à[1 3 2]
comme il y a 11
, 32
s et 210
s.Maintenant utiliser
mat2cell
de diviser par ces regroupements de ligne:Si vous le voulez vraiment, vous pouvez maintenant le diviser en différentes matrices (mais je doute que vous devez)
résultats dans
Mais je pense que vous trouverez
Ac
plus utileEDIT:
De nombreuses solutions pourrait ainsi faire une comparaison du temps:
entraîné
Donc de même pour une grande matrice de la méthode de boucle est toujours le plus rapide.
OriginalL'auteur Dan
Utilisation
accumarray
en combinaison avechistc
:Résultats:
Noter que
peut aussi être écrite
mais
unique
n'est pas intégré et est donc susceptible d'être plus lent, surtout quand elle est utilisée dans une boucle.Note également que l'ordre des lignes a changé w.r.t. l'ordre qu'ils avaient dans la matrice d'origine. Si l'ordre des questions, vous aurez à le jeter dans une autre
sort
:OriginalL'auteur Rody Oldenhuis