在向量中找到一个向量

时间:2013-04-02 14:59:07

标签: matlab

我有一个(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];

由于

2 个答案:

答案 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,:))

例如,使用循环和移位功能概括起来并不难。