2015-04-21 3 views
1

У меня есть случайная сформированной матрицанайти общие значения всех строк матрицы

A =[ 0.7015 -1.577 -1.333 0.022 -0.5 -2.00 -0.034 -0.714 
    -2.05 -0.5 1.12 -0.26 -0.97 0.96 -0.79 1.35 
    -0.353 0.28 -0.5  -1.75 -1.15 0.52 1.018 -0.22 
    -0.8 0.033 -0.29 -0.28 -0.5 -0.02 -0.13 -0.58 ] 

Я хочу, чтобы найти общие ценности всех rows.Each подряд не имеют дублированных элементов. Кто-нибудь может мне помочь?

+0

Можете ли вы быть более конкретным? Каким будет выход? –

+0

@ Luis Mendo, выход будет -0.5. только -0,5 отображается в каждой строке. – Angelababy

+0

Начните с списка, содержащего первую строку. Итерации по строкам, удаляющие элементы в списке, которые не находятся в текущей строке? – Tonio

ответ

2

Получить вектор уникальных значений с unique, а затем сравнить каждый элемент A с каждым уникальным значением с помощью bsxfun:

u = unique(A); 
m = squeeze(all(any(bsxfun(@eq, A, permute(u, [2 3 1])),2),1)); 
result = u(m); 

Это должно быть быстрым, но может быть памятью голодной, так как она генерирует 3D массив размером м х п х р, где A является м х п и р - количество уникальных значений A. Он работает, даже если строка может содержать дублированные элементы.


Эксплуатируя тот факт, что каждая строка не имеет дублированные элементы, вы можете использовать, возможно, больше памяти, eficient подход с accumarray:

[u, ~, w] = unique(A); 
m = accumarray(w,1)==size(A,1); 
result = u(m); 
+0

Я попробую. Дайте знать результаты позже. – Angelababy

+0

Ошибка: Ошибка при использовании bsxfun Не одиночные размеры двух входных массивов должны соответствовать – Angelababy

+0

Вы можете указать, что представляют собой «2», «3», «1»? Примерная матрица A равна 4 * 8, которую я отправляю в вопросе. – Angelababy

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