根据特定值左右选择矩阵中的n个元素

umb*_*987 4 arrays matlab matrix

我有一个逻辑矩阵A,我想选择固定距离的每个1s值左边的所有元素.假设我的距离是4,我想(例如)用固定值替换(说2)A中每个1左边的所有4个单元格.

A= [0 0 0 0 0 1 0
   0 1 0 0 0 0 0
   0 0 0 0 0 0 0
   0 0 0 0 1 0 1]

B= [0 2 2 2 2 1 0
   2 1 0 0 0 0 0
   0 0 0 0 0 0 0
   2 2 2 2 2 2 1]
Run Code Online (Sandbox Code Playgroud)

B是我想要的,考虑到也是过度的(B中的最后一行),以及我的1左边只有1个值而不是4作为固定搜索距离(第二行)的情况.

the*_*alk 8

这个可爱的单行怎么样?

n = 3;
const = 5;
A = [0 0 0 0 0 1 0;
     0 1 0 0 0 0 0;
     0 0 0 0 0 0 0;
     0 0 0 0 1 0 1]

A(bsxfun(@ne,fliplr(filter(ones(1,1+n),1,fliplr(A),[],2)),A)) = const
Run Code Online (Sandbox Code Playgroud)

结果是:

A =

     0     0     5     5     5     1     0
     5     1     0     0     0     0     0
     0     0     0     0     0     0     0
     0     5     5     5     5     5     1
Run Code Online (Sandbox Code Playgroud)

这里有一些解释:

Am = fliplr(A);                      %// mirrored input required
Bm = filter(ones(1,1+n),1,Am,[],2);  %// moving average filter for 2nd dimension
B = fliplr(Bm);                      %// back mirrored
mask = bsxfun(@ne,B,A)               %// mask for constants
A(mask) = const
Run Code Online (Sandbox Code Playgroud)

  • 这太好了!+1 (2认同)