Find matrix rows that have 3 common values, store the rows and the values

3 visualizaciones (últimos 30 días)
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
Pseudoscientist
Pseudoscientist el 16 de Abr. de 2019
Yes the following result is correct, displayig the result in ascending order is very good

Iniciar sesión para comentar.

Respuesta aceptada

Matt J
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
Pseudoscientist
Pseudoscientist el 17 de Abr. de 2019
Editada: Matt J el 17 de Abr. de 2019
Hmm quite interesting, the logic seems to work but when the results are plotted, the result is not that great..
Imagine a sphere filled with a tetrahedral mesh, the tetras have values 1 and 2. Now where the tetras face each other, we should have a triangular surface of values 3.
The first image is what should be. The second image is what is calculated as triangles with values 3. The third image is the sphere.
The first image has about 43k triangles and
the second image
tri_3 = find(result(:,4)==4);
result1 = result(tri_3,:);
has about 3k
Matt J
Matt J el 17 de Abr. de 2019
Editada: Matt J el 17 de Abr. de 2019
OK. One more version (I think this is it).

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Creating and Concatenating 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!

Translated by