【发布时间】:2014-03-25 18:21:51
【问题描述】:
在 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];
我想找到所有零元素的邻居,除了零元素。这意味着我想将 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
【问题讨论】:
-
@LuisMendo 我已经更新了我的问题。