2017-06-01 3 views
1

J'ai une matrice de données XYZ, X et Y sont dans un "format meshgrid" régulier, j'ai besoin de réduire le nombre de points par un facteur. échantillon:Sous-échantillon d'une matrice de maillage XY

stepXY = 1; 
X = 1:stepXY:100; 
Y = 1:stepXY:80; 

[Xm,Ym] = meshgrid(X,Y); 

XYZ = [Xm(:) Ym(:)]'; 
XYZ(3,:) = 7; 

Comment obtenir un XYZ2 = XYZ comme une étape de 10 (en XY) au lieu de 1? Je ne peux pas obtenir un élément après chaque 10 étapes Becouse cela vous donnent quelque chose comme:

1 1 7 
1 10 7 
. 
. 
. 
2 1 7 <==== look, X should be 10 here. 
+1

Pourquoi ne pas faire juste une autre meshgrid avec stepXY = 10? – Jed

+0

Parce que les données sont déjà formées et que j'ai besoin de le sous-échantillonner. – Pedro77

Répondre

1

Vous pouvez créer de nouveaux vecteurs de X et Y valeurs avec votre nouveau pas, utilisez ismember pour trouver des indices où vos anciennes valeurs sont membres de vos nouveaux ensembles. Par exemple, si vous voulez que votre nouveau pas dans les deux directions x et y être 10, vous faites ceci:

newStep = 10; 
newX = 1:newStep:100; 
newY = 1:newStep:80; 
index = ismember(XYZ(1, :), newX) & ismember(XYZ(2, :), newY); 
XYZ2 = XYZ(:, index); 

XYZ2 = 

    Columns 1 through 24 

    1  1  1  1  1  1  1  1 11 11 11 11 11 ... 
    1 11 21 31 41 51 61 71  1 11 21 31 41 ... 
    7  7  7  7  7  7  7  7  7  7  7  7  7 ... 
0

Est-ce que vous voulez:

Zm = X*0+7; %or whatever your data is 
XYZ = cat(3,Xm,Ym,Zm); 
XYZ_subsample = XYZ(1:10:end,1:10:end,:);