Comment sélectionner une sous-matrice (pas dans un modèle particulier) dans Matlab
Comment sélectionner un submatrix (pas dans un pattern) dans Matlab? Par exemple, pour une matrice de taille de 10 par 10, comment choisir le submatrix composé d'intersection de la 1re 2e et 9e rangs et les 4e et 6e colonnes?
Merci pour toutes les réponses utiles!
source d'informationauteur v32
Vous devez vous connecter pour publier un commentaire.
TLDR: Réponse Courte
Quant à votre question, supposons que vous avez un arbitraire de 10 par 10 de la matrice
A
. La façon la plus simple d'extraire les sous-matrice serait avec un indice de vecteur:Indexation dans MATLAB
Il y a un article intéressant dans la documentation officielle que de manière exhaustive l'indexation dans MATLAB.
Fondamentalement, il existe plusieurs façons d'extraire un sous-ensemble de valeurs, je vais résumer pour vous:
1. L'Indexation Des Vecteurs
Indexation des vecteurs indiquent les indices de l'élément à extraire. Ils peuvent contenir un index unique ou à plusieurs, comme suit:
Indexation des vecteurs peut être spécifié pour chaque dimension séparément, par exemple:
Il y a aussi deux indices:
end
et le côlon (:
):end
indique simplement le dernier indice de cette dimension.Par exemple, au lieu d'écrire
A([1 2 3], [2 3])
vous pouvez écrireA(:, 2:end)
. Ceci est particulièrement utile pour les grandes matrices.2. Linéaire Indexation
Linéaire indexation traite toute matrice comme s'il s'agissait d'un vecteur colonne par la concaténation des colonnes dans un vecteur colonne et l'attribution des indices pour les éléments respectivement. Par exemple, nous avons:
et nous voulons calculer
b = A(2)
. L'équivalent vecteur colonne est:et donc
b
est égal à 40.La spéciale du côlon et
end
indices sont aussi autorisés, bien sûr. Pour cette raison,A(:)
convertit une matriceA
dans un vecteur colonne.Linéaire de l'indexation avec la matrice des indices:
Il est également possible d'utiliser une autre matrice linéaire de l'indexation. L'indice de la matrice est tout simplement converti en un vecteur colonne, et utilisé pour l'indexation linéaire. La matrice obtenue est cependant toujours de la même dimension que l'indice de la matrice.
Par exemple, si
I = [1 3; 1 2]
, puisA(I)
est la même que l'écriture dereshape(A(I(:)), size(I))
.De la conversion à partir de la matrice des indices linéaire des indices et vice versa:
Pour cela, vous avez
sub2ind
etind2sub
, respectivement. Par exemple, si vous voulez convertir les indices[1, 3]
dans la matriceA
(correspondant à l'élément 30) dans un linéaire d'index, vous pouvez écriresub2ind(size(A), 1, 3)
(le résultat est dans ce cas devrait être de 7, bien sûr).3. Logique D'Indexation
Dans la logique d'indexation les indices sont binaires, où une logique
1
indique que l'élément correspondant est sélectionné, et0
signifie qu'il n'est pas. L'indice du vecteur doit être de mêmes dimensions que l'original de la matrice ou d'un vecteur avec le même nombre d'éléments. Par exemple, si nous avons:et nous voulons extraire
A([1 3], [1 2])
à l'aide de logiques d'indexation, nous pouvons faire ceci:ou ceci:
ou ceci:
Noter que dans les deux derniers cas est une dimension du vecteur, et devraient être réorganisées de retour dans une matrice si nécessaire (par exemple, à l'aide de
carré
).Laissez-moi vous expliquer avec un exemple:
Nous allons définir une matrice 6x6
À partir de cette matrice que vous voulez que les éléments dans les lignes 1, 2 et 5, et dans les colonnes 4 et 6
Espère que cette aide.
Renvoie la matrice A, jeth ligne et jth colonne supprimée.