Hi,
I have an array like:
0.2 2 3
1 3 4
1 4 6
0.8 4 6
2 5 1
1 6 2
0.4 6 2
Now I want to code that MATLAB sums up the values of the 1st column in the rows where the value of the 2nd and 3rd column match.
So the result should look like this below:
0.2 2 3
1 3 4
1.8 4 6
2 5 1
1.4 6 2
I hope someone can help me, thank you!

3 件のコメント

Bob Thompson
Bob Thompson 2019 年 1 月 23 日
"where the value of the 2nd and 3rd column match."
How do the values of the 2nd and 3rd column match in any of these rows?
In general form this should be fairly easy with logic indexing.
yinki23
yinki23 2019 年 1 月 23 日
Sorry if I was unspecific.
For example, rows no.3 and no.4 both have 4 and 6 in columns no.2 and no.3. So I want to sum these 2 rows up in column 1 (1+0.8). Same with rows no.6 and no.7.
I hope this helps you understand my question.
James Tursa
James Tursa 2019 年 1 月 23 日
Are the values in columns 2 and 3 always positive integers?

サインインしてコメントする。

 採用された回答

Andrei Bobrov
Andrei Bobrov 2019 年 1 月 23 日

0 投票

A = [0.2 2 3
1 3 4
1 4 6
0.8 4 6
2 5 1
1 6 2
0.4 6 2];
[a,~,c] = unique(A(:,2:3),'rows','stable');
out = [accumarray(c,A(:,1)),a];

1 件のコメント

yinki23
yinki23 2019 年 1 月 23 日
Thank you so much! Works perfect for me!

サインインしてコメントする。

その他の回答 (1 件)

s
s 2019 年 1 月 23 日

0 投票

clc;
clear all;
A = [0.2 2 3;1 3 4;1 4 6;0.8 4 6;2 5 1;1 6 2;0.4 6 2];
B = size (A,1);
Result = [];
n = 0;
for i = 1:1:B-1
if (A(i,2) == A(i+1,2) && A(i,3) == A(i+1,3))
n = n+1;
end
end
for j = 1:1:B-n
if (A(j,2) == A(j+1,2) && A(j,3) == A(j+1,3))
Sum = A(j,1)+A(j+1,1);
Result = [Result; Sum A(j,2) A(j,3)]
A([j+1],:) = [];
else
Result = [Result; A(j,1) A(j,2) A(j,3)]
end
end
This should help

カテゴリ

質問済み:

2019 年 1 月 23 日

回答済み:

s
s
2019 年 1 月 23 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by