在 matlab 中,我有一个非负项矩阵 A。请参阅以下内容:
A=[0 2 3 5 4 7 8
1 8 2 7 5 2 9
0 1 2 4 8 0 5
2 4 8 6 0 5 8
1 1 2 5 8 3 6];
我想找到除零元素以外的所有零元素的邻居。这意味着我想在向量 v 中存储 A(1, 1)、A(2, 5)、A(3, 1)、A(3, 6)、A(4, 5) 和A(5, 1),如果其中一个邻居为零,则我不存储它。
元素 (i, j) 的邻居是指距离 (i, j) 一个元素远的元素,即 A(i, j+1), A(i, j-1), A(i-1, j), A(i-1, j-1), A(i-1, j+1), A(i+1, j), A(i+1, j-1) , 和 A(i+1, j+1)。每个元素 (i, j) 都有 7 个邻居。
我不存储重复元素。这意味着,如果例如 A(1, 1)=0 and A(1,3)=0 and A(1,2)=1 那么我将只存储一次 A(1, 2)。
在我之前的示例中,向量 v 将是这个:
v=[2 1 8 1 2 4 5 2 9 8 5 5 8 4 6 5 8 3];
如何在没有循环的情况下在 matlab 中做到这一点?
这是我的方阵代码:cl_ 是我的矩阵中零的个数。 ix_为零元素的行索引,iy_为零元素的列索引。
for i_=1:length(cl_)
ixn1_(1:2)=ix_(i_);
ixn2_(1:3)=ix_(i_)-1;
ixn3_(1:3)=ix_(i_)+1;
iyn1_=iy_(i_)-1;
iyn2_=iy_(i_)+1;
iyn3_(1:3)=[iy_(i_)-1, iy_(i_), iy_(i_)+1];
ixn_{i_}=[ixn1_, ixn2_, ixn3_];
iyn_{i_}=[iyn1_, iyn2_, repmat(iyn3_, 1, 2)];
end
% find the neighbors
我是一名优秀的程序员,十分优秀!