adding counts of ordered pairs
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Barbara Margolius
le 6 Sep 2022
Commenté : Bruno Luong
le 6 Sep 2022
I have a sequence of by 3 arrays, say , , …, that are generated within a loop. That is, the number of rows of each array varies, but each array has three columns. The first two columns represent ordered pairs. The third column is the count of those ordered pairs. I want to "add" these together so that I get an array that accumulates the counts of these ordered pairs into a new array that is with the same structure. For example, if is
A1=[1 4 3;
3 5 1;
12 4 7;
13 5 2;
14 1 1];
and is
A1=[1 5 1;
13 5 1;
13 7 3;
14 1 5];
then the cumulative matrix should be
A=[1 4 3;
1 5 1;
3 5 1;
12 4 7;
13 5 3;
13 7 3;
14 1 6];
The arrays being "summed" in this way have hundreds of entries and are themselves summaries of arrays with thousands of entries, so efficiency matters.
0 commentaires
Réponse acceptée
Bjorn Gustavsson
le 6 Sep 2022
One way to go about this is to use sparse:
A1 = [1 4 3;
3 5 1;
12 4 7;
13 5 2;
14 1 1];
A2 = [1 5 1;
13 5 1;
13 7 3;
14 1 5];
A_all = sparse([A1(:,1);A2(:,1)],[A1(:,2);A2(:,2)],[A1(:,3);A2(:,3)]);
[I1,I2,Val] = find(A_all);
[~,idx1] = sort(I1);
disp([I1(idx1),I2(idx1),Val(idx1)])
HTH
2 commentaires
Bruno Luong
le 6 Sep 2022
This will save you a sort
A1 = [1 4 3;
3 5 1;
12 4 7;
13 5 2;
14 1 1];
A2 = [1 5 1;
13 5 1;
13 7 3;
14 1 5];
A_all = sparse([A1(:,2);A2(:,2)],[A1(:,1);A2(:,1)],[A1(:,3);A2(:,3)]);
[I2,I1,Val] = find(A_all);
A = [I1,I2,Val]
Plus de réponses (1)
Bruno Luong
le 6 Sep 2022
Modifié(e) : Bruno Luong
le 6 Sep 2022
A1=[1 4 3;
3 5 1;
12 4 7;
13 5 2;
14 1 1];
A2=[1 5 1;
13 5 1;
13 7 3;
14 1 5];
A12=[A1; A2];
[A12u,~,J]=unique(A12(:,1:2),'rows','stable');
A=[A12u,accumarray(J,A12(:,3))]
7 commentaires
Bjorn Gustavsson
le 6 Sep 2022
@Bruno Luong: The amount of subconsious/implicit assumptions I make when writing QD-solutions is a bit frightening.
Voir également
Catégories
En savoir plus sur Matrices and Arrays 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!