matlab - 查找矩阵中所有零元素的邻居

标签 matlab vector matrix

在 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

最佳答案

如果您不关心值的顺序:

mask = A==0;
neighborMask = xor(conv2(double(mask),ones(3),'same')>0,mask);
v = A(neighborMask)

关于matlab - 查找矩阵中所有零元素的邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643154/

相关文章:

C 矩阵乘法动态分配矩阵

matlab - Matlab中的颜色直方图算法

c - MATLAB 到 C 代码

c++ - C++ 中的线程 vector

C++ - 按自定义数据类型 vector 的值删除元素

multithreading - 并行乘以小矩阵

arrays - 是否有一种惯用的方法来交换单元格数组中的两个元素?

c++ - circshift 方面的 fftshift/ifftshift

c++ - 从文件创建二维 vector ?

对角线上/下矩阵的行和