adding counts of ordered pairs
1 回表示 (過去 30 日間)
古いコメントを表示
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
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1118115/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1118120/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1118125/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1118130/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1118135/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1118140/image.png)
A1=[1 4 3;
3 5 1;
12 4 7;
13 5 2;
14 1 1];
and
is
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1118145/image.png)
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 件のコメント
採用された回答
Bjorn Gustavsson
2022 年 9 月 6 日
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 件のコメント
Bruno Luong
2022 年 9 月 6 日
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]
その他の回答 (1 件)
Bruno Luong
2022 年 9 月 6 日
編集済み: Bruno Luong
2022 年 9 月 6 日
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 件のコメント
Bjorn Gustavsson
2022 年 9 月 6 日
@Bruno Luong: The amount of subconsious/implicit assumptions I make when writing QD-solutions is a bit frightening.
参考
カテゴリ
Help Center および File Exchange で Matrices and Arrays についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!