2013-10-27 2 views
0

ПредполагаяКак я могу использовать из IsMember

A=[32512199.30 5401000.29 347.33 
32512199.69 5401000.45 347.39  
32512199.67 5401001.32 353.58  
32512199.96 5401001.50 346.99  
32512196.71 5401001.69 346.62 ] 

и

B=[32512199.30 5401000.29 347.33 
    32512199.69 5401000.45 347.39  
    32512199.67 5401001.32 347.00  
    32512198.85 5401000.91 347.25  
    32512196.71 5401001.69 346.87  ] 

Я хочу с помощью IsMember извлечения строк, которые имеют такое же X и Y и Z. X другое является первым колонком, Y является второй, а Z - третий. в A и B Хочу получить от A 32512199.67 5401001.32 353.58 и 32512196.71 5401001.69 346.62 ИЛИ от B 32512199.67 5401001.32 347.00 и 32512196.71 5401001.69 346.87 Как это сделать?

+0

Скажите нам, что вы пробовали. – jkshah

+0

ex = find (ismember (A (:, [1,2]), B (:, [1,2]), 'rows')); но не ответ. –

ответ

0

сначала найти индексы строк желаемого матча с помощью ismember и find. Затем извлечь эти строки из A/B в XA/XB

row_idx = find (ismember(ismember(A,B), [1 1 0], 'rows')) 

XA = A(row_idx,:) 
XB = B(row_idx,:) 

Выход:

row_idx = 

    3 
    5 

XA = 

    3.2512e+07 5.4010e+06 3.5358e+02 
    3.2512e+07 5.4010e+06 3.4662e+02 

XB = 

    3.2512e+07 5.4010e+06 3.4700e+02 
    3.2512e+07 5.4010e+06 3.4687e+02 
+0

Этот алгоритм отвечает здесь, но когда я бегу к своим данным, не отвечаю. Вы можете мне помочь? Тпй. –

+0

@ahmadhosseini Вы хотите сказать, что вы не получаете выходной дисплей? Если да, просто сделайте 'disp (XA)' etc .. или удалите точку с запятой в конце строки. Обновлен мой ан. Я думал, что значение матрицы печати очень прямолинейно. – jkshah

+0

Я знаю, я имею в виду, что ответ ложный :( –

1
inds = find(~ismember(A, B, 'rows')); 
new_inds = find(ismember(A(inds, 1:2), B(:, 1:2), 'rows')); 
inds(new_inds) 
+0

Спасибо U. , но для меня важно, чтобы извлечь строки, которые имеют разные Z. –

+0

i.e ряды 3 и 5, правильно? Посмотрите также на решение jkshah. –

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