Find matrix rows that have 3 common values, store the rows and the values
1 visualización (ú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 Resizing and Reshaping Matrices 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!