2013-06-21 4 views
1

Я хочу создать переменную, которая находит шаблон (допустим, [1 1]) в разных строках матрицы (A). Конечно, в каждой строке нет одинакового количества вхождений этой строки.Создание переменной с неравными строками

A = [ 0  0  0  1  1 
     1  1  1  0  0 
     0  1  0  1  1 
     1  1  1  0  0 
     0  1  0  0  1 
     1  0  1  1  1 
     0  1  0  1  0 
     1  1  1  0  1]; 

Я мог бы сделать:

for i = 1:n 
    var(i,:) = strfind(A(i,:),[1 1]); 
end 

, но тогда обе стороны уравнения не будут равны.

ERROR: ??? Subscripted assignment dimension mismatch.

Я стараюсь предопределять. Я создаю матрицу с тем, что, по моему мнению, будет максимальным количеством вхождений этой строки в каждой строке матрицы A (скажем, 50).

for i = 1:n 
    var(i, :) = NaN(1,50) 
end 

За этим следует предыдущий бит кода, и это тоже не хорошо.

Я также попытался:

for i = 1:n 
    var(i,1:numel(strfind(A(i,:),[1 1])) = strfind(A(i,:),[1 1]) 
end 

Error: The expression to the left of the equals sign is not a valid target for an assignment.

Как я должен идти об этом?

Результат, который я ожидаю, представляет собой матрицу var (i, :), которая дает мне положение в матрице, где происходят каждый из этих шаблонов. Он работает нормально только для одной строки.

Например:

var(1,:) = [1 2 5 8 10 22 48] 
var(2,:) = [2 3 4 7 34 45 NaN] 
var(3,:) = [4 5 21 32 33 NaN] 

Спасибо!

+2

Что вы имеете в виду под «не хорошо»? Какая ошибка? Кроме того, какой выход вы ожидаете? Можете ли вы дать образец 'A' и образец' var'? –

+1

Также я не уверен, что это намеренно, но если ваша матрица является матрицей целых чисел, '[1 1]' не является строкой; это массив чисел. «Строки» в matlab ссылаются на текст, поэтому 'strfind' не будет работать в этой ситуации. –

+0

в вашем цикле for вы имеете 'strfind' дважды с левой стороны. –

ответ

1

С вашей первой попытки вы попытались построить матрицу с разной длиной строк.

В вашей второй попытке: вы предварительно выделили, но затем запустите ее, повторно определив var(i,:), в то время как вы попытались поместить туда нужный результат.

В вашей третьей попытке: к сожалению, вы просто пропустили один скобки - ) в конце левого выражения.

Этот код предполагают, чтобы работать (то, что вы сделали на 2-й и 3-й попытки, с предварительно выделить и фиксированных скобках):

var=NaN(1,50); 
for i = 1:n 
    var(i,1:numel(strfind(A(i,:),[1 1]))) = strfind(A(i,:),[1 1]) 
end