我有一个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.
答案 0 :(得分:1)
您可以使用新的步长创建X
和Y
值的新向量,然后使用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,:);