2013-04-02 4 views
6

У меня есть (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 смежных в каждом столбце. Например, результатом этого будет:

арендуемая =

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

Я попытался strfind, но есть две проблемы с этим, первый в том, что это массив столбцов (транспонирование либо Didn Во-вторых, это потому, что это логический массив, если я изменяю его на строку, значения становятся истинными или ложными и пытаются получить это для работы также было бесплодным. Есть ли способ поиска вектора столбца, чтобы найти, существует ли какой-либо конкретный вектор столбца где-нибудь внутри него? Я хочу искать каждый столбец для [1; 1; 1];

Благодаря

ответ

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); 
+3

+1 но должен заменить 'imfilter'' conv2', поскольку, возможно, не имеет доступа к панели обработки изображений – Dan

+1

очень хороший подход с 'imfilter'. Если 'validY2_A' является логической матрицей, то для его работы необходимо сначала преобразовать в double, иначе' t' также является логической матрицей. При тестировании я должен был изменить его на это: 't = imfilter (double (validY2_A), ones (3,1));' –

+0

Большое вам спасибо, хотя можете ли вы объяснить, что именно делает conv2 или imfilter? Я смотрю на матрицу t, и я не понимаю, что происходит и как производятся вычисления. – TheMcCleaver

2

Здесь это то, что должно быть легко понять:

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

В основном эти индексы сдвигают вашу матрицу три раза.

Теперь вы просто применить их:

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

Это не так уж трудно обобщать с помощью цикла и сдвига функции, например.

+0

Увлекательный подход – Justin

Смежные вопросы