6

我有一个 (7,6) 逻辑数组,如下所示:

有效Y2_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 个连续的。例如,这样的结果将是:

重叠群=

[1, 1, 1, 0, 0 ,1];

我试过 strfind 但这有两个问题,第一个是它是一个列数组(转置根本没有帮助。或者需要大量额外的代码来临时使用。第二个问题是因为它是一个逻辑数组,如果我将其更改为字符串,则所有值都会变为真或假,并且试图让它工作也没有结果。有没有一种方法可以搜索列向量以查找另一个特定列向量存在于其中的任何位置?我想在每一列中搜索 [1; 1; 1];

谢谢

4

2 回答 2

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 );
于 2013-04-02T15:02:16.593 回答
2

这是一种应该很容易理解的方法:

idx1=1:end-2
idx2=2:end-1
idx3=3:end

基本上,这些索引将您的矩阵移动了三倍。

现在您只需应用它们:

any(validY2_A(idx1,:) & validY2_A(idx2,:) & validY2_A(idx3,:))

例如,使用循环和移位函数来概括这一点并不难。

于 2013-04-02T15:26:01.563 回答