子采样XY网格网格矩阵

时间:2017-06-01 18:27:04

标签: matlab matrix matrix-indexing

我有一个XYZ数据矩阵,X和Y是常规" meshgrid格式",我需要通过某种因素减少点数。样品:

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

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

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

如何将XYZ2 = XYZ作为步长10(在XY中)而不是1?我不能在每10个步骤之后得到一个元素,因为你得到的结果如下:

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

2 个答案:

答案 0 :(得分:1)

您可以使用新的步长创建XY值的新向量,然后使用ismember查找旧值是新集合成员的索引。例如,如果您希望x和y方向的新步长为10,则可以执行以下操作:

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    ...

答案 1 :(得分:0)

这就是你想要的:

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