【问题标题】:Subsample a XY meshgrid matrix对 XY 网格矩阵进行二次采样
【发布时间】:2017-06-01 18:27:04
【问题描述】:

我有一个 XYZ 数据矩阵,X 和 Y 是常规的“网格格式”,我需要将点数减少一些因素。示例:

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.

【问题讨论】:

  • 为什么不直接用 stepXY = 10 做另一个网格?
  • 因为数据已经形成,我需要对其进行二次采样。

标签: matlab matrix matrix-indexing


【解决方案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    ...

【讨论】:

    【解决方案2】:

    这是你想要的吗:

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

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 2011-07-26
      相关资源
      最近更新 更多