我有一个逻辑矩阵 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]
在 B 中是我想要的,同时考虑到覆盖(B 中的最后一行),以及在我的 1 左侧只有 1 个值而不是 4 作为固定搜索距离(第二行)的情况。
最佳答案
这个可爱的单线怎么样?
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
结果是:
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
这里有一些解释:
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
关于arrays - 根据确定的值从矩阵左侧选择n个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23867537/