find row with certain value and put in cell
    7 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
B=[ 1     2
     1     5
     2     3
     2     4
     2     5
     3     4
     4     5
     4     7
     4     9
     5     6
     6    11
     6    12
     6    13
     7     8
     7     9
     9    10
     9    14
    10    11
    12    13
    13    14];
A= [1     0     1     0     1     0     1
     1     0     1     0     1     0     1
     0     1     0     0     0     0     0
     0     1     1     0     1     0     1
     1     0     0     0     0     0     0
     0     1     0     0     0     0     0
     0     0     1     0     0     0     0
     0     0     0     1     0     0     0
     0     0     0     1     1     0     1
     0     0     0     0     1     0     1
     0     0     0     0     1     0     0
     0     0     0     0     0     1     0
     0     0     0     0     0     1     1
     0     0     0     0     0     0     0
     0     0     0     1     0     0     0
     0     0     0     0     1     0     0
     0     0     0     0     0     0     1
     0     0     0     0     1     0     0
     0     0     0     0     0     1     0
     0     0     0     0     0     0     1];
 res=cell(1,size(A,2));
for i=1:size(A,2)
    [row,~]=find(A(:,i)==1);
    res{i}=B(row,:);
end
result= cellfun(@(x) unique(x),res,'UniformOutput',false);
I want to get this result={[1,2,5],[2,3,4],[1,2,4,5],[4,7,9],[1,2,4,5,6,9,10,11],[6,12,13],[1,2,4,5,6,9,13,14]}
0 commentaires
Réponse acceptée
  Jos (10584)
      
      
 le 18 Fév 2019
        result = arrayfun(@(k) unique(B(A(:,k)==1,:)).', 1:size(A,2), 'un', 0)
0 commentaires
Plus de réponses (2)
  adi kul
      
 le 18 Fév 2019
        Change last line to this:
result= cellfun(@(res) unique(res),res,'UniformOutput',false)
And let us know if this is what you were looking!
0 commentaires
  Andrei Bobrov
      
      
 le 18 Fév 2019
        
      Modifié(e) : Andrei Bobrov
      
      
 le 18 Fév 2019
  
      z = B.*permute(A,[1,3,2]);
[~,jj] = ndgrid(1:size(A,1)*2,1:size(A,2));
out = accumarray(jj(:),z(:),[],@(x){unique(x(x~=0))});
0 commentaires
Voir également
Catégories
				En savoir plus sur Directed Graphs dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


