2016-10-27 5 views
0

Я упростил эту проблему из другого сообщения. Определить A и B как нижеПроверка того, является ли ячейка матриц подмножеством другой ячейки матриц

A = {[1 1 1],[2 3 3]} 

B = {[1 1 1],[2 3 3],[3 3 2]} 

A - ячейка 1x2 из двух массивов; B - ячейка 1x3, содержащая три массива.

Я пытаюсь написать фрагмент кода, который принимает A и B в качестве входных данных, и выводит 1, если A является членом B (который находится в приведенном выше примере) и 0 в противном случае.

ответ

1

Шаги:

⓵ Возьмите transpose из A и B.
⓶ Преобразуйте их в матрицы, используя cell2mat.
⓷ Используйте ismember, чтобы определить, строка за строкой, если A является членом B или нет
⓸ Использование all, чтобы определить, если все строки A находятся в B или нет.

Код:

A = cell2mat(A.'); B = cell2mat(B.'); 
output = ismember(A,B,'rows'); 
output = all(output) 

Однострочник Код:
Вы можете написать выше в одной линии, как: all(ismember(cell2mat(A.'), cell2mat(B.'),'rows'))

1

Спасибо Sardar_Usama для решения. Между тем, я также предложил альтернативное решение.

Acell = cellfun(@mat2str,A,'UniformOutput',false) 
Bcell = cellfun(@mat2str,B,'UniformOutput',false) 
isAsubsetOfB = all(ismember(Acell,Bcell))