2017-07-04 1 views
1

J'ai deux matrices de cellules qui peuvent ne pas avoir la même taille. Les éléments des matrices de cellules sont randperm d'un nombre entier. randperm data Le type est un tableau double. Comment puis-je trouver des éléments communs de deux réseaux de cellules?Comment trouver les éléments communs de deux matrices de cellules contenant des éléments randperm?

Par exemple:

Q1 = {[1 2 3 4], [3 2 4 1], [4 2 1 3]} 
Q2 = {[2 4 3 1], [1 2 3 4], [1 2 4 3]} 

Comme je l'ai dit des éléments de réseaux de cellules sont randperm. Je veux la sortie de l'exemple ci-dessus soit « élément-1 de Q1-à-dire [1 2 3 4] puisqu'il est également présent dans Q2 Note:. Les tableaux cellulaires peuvent avoir un nombre différent de colonnes ...

+0

Je veux i ndex d'éléments ayant la même valeur. Par exemple: Q1 = ([1 2 3 4], [3 2 4 1], [4 2 1 3]) & Q2 = ([2 4 3 1], [1 2 3 4], [1 2 4 3]) comme je l'ai dit, l'élément de la cellule de tableau est randperm. Je veux que la sortie de l'exemple ci-dessus soit "l'élément 1 de Q1 est identique à l'élément 2 de Q2" – Bahar

Répondre

2

Vertically concatenate les matrices à l'intérieur des réseaux de cellules et utiliser intersect avec le drapeau 'rows'. à savoir

Q1={[1 2 3 4], [3 2 4 1], [4 2 1 3]}; 
Q2={[2 4 3 1], [1 2 3 4], [1 2 4 3]}; 
Qout = intersect(vertcat(Q1{:}), vertcat(Q2{:}), 'rows'); 

%>> Qout 
%Qout = 
%  1  2  3  4 
+0

Merci beaucoup. c'était utile. – Bahar

+0

Désolé. J'ai un problème pour utiliser la solution ci-dessus. Mes tableaux de cellules n'ont pas le même nombre de colonnes. et j'obtiens l'erreur: Les entrées A et B doivent être des matrices ayant le même nombre de colonnes dans le cas des lignes. – Bahar

+0

@Bahar Si elles sont vraiment, comme vous l'avez dit, * randperm * d'un nombre entier non. alors chaque matrice à l'intérieur du tableau de cellules aura toujours le même nombre de colonnes. Fournissez un exemple de 'Q1' et' Q2' qui satisfont la condition indiquée et donnez l'erreur que vous avez mentionnée –

0

Vous pouvez le faire en utilisant deux boucles et vérifier tous les hors.

q1=[1 2 3 4; 3 2 4 1; 4 2 1 3]; 
q2=[2 4 3 1; 1 2 3 4; 1 2 4 3]; 

%find the size of matrix 
[m1,n1] = size(q1); 
[m2] = size(q2,1); 

for (ii=1:m1) 
    for (jj=1:m2) 
     %if segments are equal, it will return 1 
     %if sum of same segment = 4 it means they are same 
     if (sum(q1(ii,:) == q2(jj,:)) == n1) 
      ii %result of q1 
      jj %result of q2 
      break; 
     end 
    end 
end 
+1

L'OP a deux matrices de cellules, pas de simples matrices –