【问题标题】:Problem building a matrix with changing variables on each row构建每行变量的矩阵时出现问题
【发布时间】:2020-01-17 02:29:53
【问题描述】:

我正在尝试为我将在我的数据集上定义的多边形的 4 个点创建一个循环。我使用 lat、lon、dlat 和 dlon 来说明这些观点

lat = [35.314166 35.413909 35.533307 35.751982 35.3142 35.1607 35.0475 34.9878 34.9441];
lon = [-119.865953 -119.970299 -120.086757 -120.300046 -119.8659 -119.7068 -119.5583 -119.4711 -119.4029];

dlat = 0.524893450440127;
dlon = 0.73025079017917;

首先,我想创建一个循环来创建 4 个点并将它们保存为矩阵 b 的第一行,大小为 (4,4)

这是我需要的矩阵

b = [p11 p12 p13 p14 ;
     p21 p22 p23 p24 ;
     p31 p32 p33 p34 ;
     p41 p42 p43 p44]  

以下是我要定义的前两个多边形点的示例:

 p11 = [lon(9) + dlon, lat(9) + dlat]
 p12 = [lon(8) + dlon, lat(8) + dlat]
 p13 = [lon(8) - dlon, lat(8) - dlat]
 p14 = [lon(9) - dlon, lat(9) - dlat]

 p21 = [lon(8) + dlon, lat(8) + dlat]
 p22 = [lon(7) + dlon, lat(7) + dlat]
 p23 = [lon(7) - dlon, lat(7) - dlat]
 p24 = [lon(8) - dlon, lat(8) - dlat]

我一直在定义这个 for 循环,我什至不知道解决方案是否是一个 for 循环。请帮我。谢谢!

【问题讨论】:

  • 您可能希望使用您尝试使用的语言来标记帖子...
  • 您使用的是 MATLAB 2016b 或更高版本吗?您的变量 p11 已经有两个元素,如果您将 4x4 的此类变量放入矩阵中,您最终会得到类似 8x4 或(您可能想要的)4x4x2 的结果。
  • 我的 MATLAB 版本是 2019b。是的,事实上,正如你所说,它将是 4x4x2。有可能做这样的for循环吗?

标签: matlab for-loop matrix


【解决方案1】:

这里有两个解决方案。我试图尽可能贴近您向我展示的非循环代码:

s=numel(lon); % I guess we start at 9 because lon has 9 elements?
b=zeros(4,4,2);
for ix=1:size(b,1)
    %Calculate the indices of lon and lat
    index=s-ix;
    %very similar to the example you showed, insert the data into the
    %matrix
    b(ix,1,:)=[lon(index+1) + dlon, lat(index+1) + dlat];
    b(ix,2,:)=[lon(index)   + dlon, lat(index)   + dlat];
    b(ix,3,:)=[lon(index)   - dlon, lat(index)   - dlat];
    b(ix,4,:)=[lon(index+1) - dlon, lat(index+1) - dlat];
end

这里有一个替代方案,可以稍微减少代码。

s=numel(lon); % I guess we start at 9 because lon has 9 elements?
b=zeros(4,4,2);
for ix=1:size(b,1)
    %Calculate the indices of lon and lat
    index=s-ix+[1,0,0,1];
    %Build up one slice
    h=([lon(index);lat(index)]+[dlon;dlat].*[1,1,-1,-1]).';
    %insert h into the matrix. h is wrong way round, so it is transposed.
    b(ix,:,:)=h.';
end

【讨论】:

  • 非常感谢。效果很好。
猜你喜欢
  • 2020-07-02
  • 2021-12-25
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 2013-07-23
相关资源
最近更新 更多