Décalage de lignes de la matrice dans matlab
Je dois maj certaines lignes dans matlab. Comme disons que j'ai une matrice de taille 50x50. Et je dois maj certaines lignes permet de dire 15,18,45.. vers le haut et les lignes restantes au fond. Comment puis-je faire cela de matlab?
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé le circshift fonction? Quelque chose comme cela pourrait aider:
C'est un problème qui peut être facilement résolu avec l'aide d'une simple indexation:
J'ai compris que vous voulez déplacer certaines lignes de la matrice vers le haut et laisser le reste à sa place. Pour cela, vous pouvez utiliser ceci:
Exemple de matrice:
Voici le code:
Edit: nouvelle meilleure solution (présenté ici, d'abord parce que c'est mieux).
Edit: le reste de la réponse est liée à un [limited] plus âgés solution.
Edit: correction d'un bug avec les non-ordonnée RowsVector d'entrée.
C'est le résultat:
RowsVector
est triée.RowsVector=[2 1]
échouera.sort
, vous pouvez réorganiser les lignes sur le dessus après la boucle, de sorte qu'elles apparaissent dans l'ordre spécifié.J'aimerais résoudre ce problème en définissant une ligne de permutation de la matrice pour produire le résultat désiré. Si Matlab dispose d'une fonction intégrée pour cela, il m'échappe, j'ai donc écrit un:
Si
vec
est une permutation de1:n
cette fonction renvoie une matrice qui permute les lignes d'unnxn
matrice1->vec(1), 2->vec(2), ...
Note l'absence de vérification d'erreur et le comme donc l'utiliser dans le code de production à vos propres risques.Dans ce cas, si A est la matrice de permuter, vous pouvez écrire:
out = A([15, 18, 45, 1:14,16:17,19:44,46:50],:)
? Notez que tout ce que j'essaie dans ma solution est de faciliter la création de la permutation.