2013-10-25 3 views
-2

У меня проблема с поиском. Я не знаю, в чем проблема.Как работать с поиском?

Я хочу, чтобы найти индексы в матрице по отношению к другой матрице, которые имеют такое же X, Y и Z. другого

Мою матрица являются selectedl и selectedf с аналогичными рядами и различными рядами так.

exP=find(selectedl(:,[1,2])==selectedf(:,[1,2]) & selectedl(:,3)~=selectedf(:,3)); 

В чем проблема в строке?

+1

Какая ошибка у вас возникла? Каковы размеры матрицы? –

+1

Предполагаемая матрица 'A = [1 2 3; 4 5 6; 7 8 9; 10 11 12]' и матрица 'B = [4 5 6; 7 8 -1; 10 11 12; 10 11 -1; 4 5 6] 'Что бы вы хотели показать? –

+0

Я хочу найти строки, которые имеют одинаковые X и Y и разные Z. Например, я хочу [7 8 9; 10 11 12] из первой матрицы ИЛИ [7 8 -1; 10 11 -1] из второй матрицы , Спасибо. –

ответ

0

Если я правильно понимаю (первая колонка х, второй является у, третий является г, каждая строка представляет другую точку), вам просто нужно добавить ряды all в первой части:

exP=find(all(selectedl(:,[1,2])==selectedf(:,[1,2]),2) & selectedl(:,3)~=selectedf(:,3)); 

Или, возможно, более читаемым:

exP=find(selectedl(:,1)==selectedf(:,1) & selectedl(:,2)==selectedf(:,2) & selectedl(:,3)~=selectedf(:,3)); 

Это предполагает обе матрицы имеют одинаковый размер и порядок вопросы. Если нет, см. Ответ @ Dan.

1

Более читаемый версия будет:

A = selectedl == selectedf; 
exP = find(A(:,1) & A(:,2) & ~A(:,3)); 
0

Вы, вероятно, следует использовать ismember вместо find:

[incl, indices] = ismember(selectedl(:,1:2), selectedf(:,1:2), 'rows'); %// Or possibly ismember(selectedf(:,1:2), selectedl(:,1:2), 'rows') depending on what you're after 
excl = ismember(selectedl, selectedf, 'rows'); 
indices(incl & ~excl) 

Таким образом, ваши строки не должны соответствовать 1 1 поперек две матрицы и матрицы не обязательно должны иметь одинаковую длину.

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