2013-03-15 3 views
0

Disons que j'ai un 3x3x3 tableau Matlab avec les membres de 1 à 27tableau Matlab subsetting par les indices

a=reshape(1:27, [3 3 3])

Je voudrais créer un sous-ensemble de cela avec une syntaxe comme

b=a(range1,range2,range3)

où pour range1 = range2 = range3 = 1: 2 j'obtiendrais les membres b(1,1,1) et b(2,2,2). i.e.

b= [1 14]

Est-il possible de le faire juste avec l'indexation et sans fonctions (par exemple diag)? Merci ...

+0

@Parag, sub2ind requiert des vecteurs de même taille pour les plages. Par exemple 'b = a (sub2ind (taille (a), plage1, plage2,1: 3))'. C'est pourquoi je cherche à le faire seulement avec les indices ... – ZZZ

+0

@Molly s'il vous plaît voir mon commentaire à Parag au-dessus ... – ZZZ

+0

range1, range2, et range3 doivent être de la même taille car chacun correspond à une dimension de la matrice une. Par exemple, si range1 = [x1, x2, x3], range2 = [y1, y2, y3] et range3 = [z1, z2, z3], les valeurs obtenues seront a (x1, y1, z1), a (x2 , y2, z2) et a (x3, y3, z3). Il ne serait donc pas logique que cette fonction prenne des vecteurs de tailles différentes. Dans l'exemple de votre commentaire, que faire de la réponse? – Molly

Répondre

1

Il peut être fait avec sub2ind fonction comme suit:

b=a(sub2ind(size(a),range1,range2,range3)) 

ans: b=[1 14] 
+0

sub2ind requiert des vecteurs de même taille pour les plages. Par exemple 'b = a (sub2ind (taille (a), plage1, plage2,1: 3))'. C'est pourquoi je cherche à le faire seulement avec les indices ... – ZZZ

+0

Si elles sont de même taille, disons 1: 2, 1: 2, 1: 3, alors comment allez-vous décider des indices. Parce que quand ils sont de taille égale 1: 2, les indices seront (1,1,1) et (2,2,2) –

1

L'indexation peut être effectuée à l'aide sub2ind,

a(sub2ind(size(a),[1:2],[1:2],[1:2])) 

si vous voulez éviter toutes les fonctions, vous pourriez calculé les indices linéaires vous-même ...

+0

s'il vous plaît voir mon commentaire à Parag ... – ZZZ

Questions connexes