Find matrix rows that have 3 common values, store the rows and the values
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Pseudoscientist
 el 16 de Abr. de 2019
  
Suppose I have a 500000x5 matrix and for each row I need to find rows that have 3 common elements within the first 4 elements of the row but different 5th element and store the common values and the sum of the 5th elements to a new matrix.
For example:
1 2 3 4 1
1 2 3 5 2
Would yield a row like this in a new matrix
1 2 3 3
Of course this could be done with 2 nested for loops and if statements but the calculation takes like 10 hours. I need something that takes a few minutes even with 500k rows.. Is this possible with Matlab? 
5 comentarios
Respuesta aceptada
  Matt J
      
      
 el 16 de Abr. de 2019
        
      Editada: Matt J
      
      
 el 17 de Abr. de 2019
  
      I'll call your original 5 column matrix A.
 D=cell(4,1);
 a5=A(:,5);
 As=sort(A(:,1:4),2);  
 for i=1:4  %small loop
   Triangles{i}=  [As(:, setdiff(1:4,i)),a5];
 end
 Q=cell2mat(Triangles);
 result=consol(Q(:,1:3),Q(:,4));
    function out=consol(B,b)
       [C,~,j]=unique(B,'rows');
       nc=size(C,1);
       c=accumarray(j,b,[nc,1]);
       out=[C,c];
        keep=histcounts(j,1:nc+1)>1;
        out=out(keep,:);
    end
9 comentarios
Más respuestas (0)
Ver también
Categorías
				Más información sobre Surface and Mesh Plots en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





