我有一个(7,6)逻辑数组,如下所示:
validY2_A =
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 1 0 0
1 0 0 1 1 0
1 1 1 0 0 1
1 1 1 0 1 1
0 1 1 1 1 1
我想创建一个(1,6)逻辑向量'contig',它显示上面的矩阵在每列中是否有3个连续的。例如,结果将是:
contig =
[1, 1, 1, 0, 0 ,1];
我已经尝试了strfind但是这有两个问题,第一个是它是一个列数组(转置要么根本没有帮助。或者需要大量额外的代码暂时使用。第二个问题是因为它是一个逻辑数组,如果我把它改成一个字符串,值都变为true或false,并试图让它工作也没有结果。是否有一种方法来搜索列向量以查找是否另一个,特定列向量是否存在于其中?我想在每列中搜索[1; 1; 1];
由于
答案 0 :(得分:5)
怎么样
t = imfilter( validY2_A, ones(3,1) );
contig = any( t >= 3, 1 );
或者(由@Dan建议):
t = conv2( validY2_A, ones(3,1), 'same');
contig = any( t >= 3, 1 );
根据@GeorgeAprilis的建议,可能需要将逻辑矩阵validY2_A
转换为双倍优先:
validY2_A = double( validY2_A );
答案 1 :(得分:2)
这是一种易于理解的方式:
idx1=1:end-2
idx2=2:end-1
idx3=3:end
基本上这些索引会将矩阵移动三次。
现在你只需应用它们:
any(validY2_A(idx1,:) & validY2_A(idx2,:) & validY2_A(idx3,:))
例如,使用循环和移位功能概括起来并不难。