这个临时矩阵是用Matlab编写的,任何人都可以给我一些解释吗?。
%Temporary matrix for evaluation
EE=E;
n_neighbour_high=1;
for i=1:x_size
for j=1:y_size
%Check neighbours
k=i-1:i;
l=j-1:j;
%If neighbours within the grid
if min(k)>0 && min(l)>0 && max(k)<=x_size && max(l)<=y_size
%If among all the neighbours there enough high elemets, all the block is high
if sum(sum(double(EE(l,k)>0)))>=n_neighbour_high
E(l,k)=elev;
end
end
end
end
答案 0 :(得分:0)
让我们分解一下:
for i=1:x_size
for j=1:y_size
表示您正在遍历2D矩阵的每个元素。
%Check neighbours
k=i-1:i;
l=j-1:j;
这里您要定义称为k
和l
的新变量,它们基本上是i
和j
之前的数字,直到i
和{{1} }。
假设j
将使i = 2
成为具有值k
的向量。如果[1 2]
将为i
,则k将为3
,依此类推...始终是[2 3]
之前的数字和数字i or j
。
i or j
这里,您只是在检查索引是否有效(在1和2d数组大小范围内)(顺便说一下,其中一些检查是不必要的)
对于在 %If neighbours within the grid
if min(k)>0 && min(l)>0 && max(k)<=x_size && max(l)<=y_size
中的值将获得i or j = 1
的情况下k or l
而言,这是避免问题的必要方法。
[0 1]
在这里,您从大小为(2x2)的EE( %If among all the neighbours there enough high elemets, all the block is high
if sum(sum(double(EE(l,k)>0)))>=n_neighbour_high
E(l,k)=elev;
end
)中提取一个子2d矩阵,并且您要计算这4个元素中有多少个大于0和(EE(l,k)
)。
sum(sum(double(EE(l,k)>0)))
如果元素数量更大,则阈值 E(l,k)=elev;
升高n_neighbour_high``you are saving the value of
E`。
我认为这确实可以帮助您学习使用调试器(单击Matlab编辑器中的行号,以便获得一个小红点) have a look at this