How to write a code for 3 Variables
3 views (last 30 days)
Show older comments
Gokhan Kayan
on 25 Mar 2018
Commented: Gokhan Kayan
on 27 Mar 2018
I want to write a code to obtain a new value array that is dependent to 3 variables. My 3 variables are like the table shown below:
A B C
1 400 200
1 500 100
2 455 300
2 200 400
3 100 500
3 500 600
2 600 100
3 700 900
1 800 150
2 900 150
I want to calculate new 'D' array from A,B,C. My code should be like this if A=1 then calculate the sum of B and divide it to sum of C.
For example we have 3 row that A=1 and we have B=400,500,900 C=200,100,150 for A=1. So it shoulde be 400 +500+900 /200+100+150. The result (D) is 4 for A=1. I have so many A values and ı don't know how to calculate all of them. If you help me, I will be very happy. Thank you.
0 Comments
Accepted Answer
John D'Errico
on 25 Mar 2018
Edited: John D'Errico
on 25 Mar 2018
Easy peasy. What, 2 lines?
abc = [1 400 200
1 500 100
2 455 300
2 200 400
3 100 500
3 500 600
2 600 100
3 700 900
1 800 150
2 900 150];
[ai,bcsum] = consolidator(abc(:,1),abc(:,2:3),@sum)
ai =
1
2
3
bcsum =
1700 450
2155 950
1300 2000
bcratio = bcsum(:,1)./bcsum(:,2)
bcratio =
3.7778
2.2684
0.65
There is no need for the A values to be integers. As long as they are distinct will suffice.
More Answers (2)
Walter Roberson
on 25 Mar 2018
sumB = accumarray(A, B);
sumC = accumarray(A, C);
D = sumB ./ sumC;
D(sumB == 0 & sumC == 0) = 0;
This applies directly only if the A values are positive integers, preferably small and consecutive. If they are not positive integers then there is an adjustment that can be made using unique()
The final setting to 0 is for the case where the sum of B and sum of C are both 0, replacing the NaN that would result with 0. The sums could be 0 if the entries can be positive and negative; the sums can also be 0 if there is a gap in the values of A, such as if A might be [1, 2, 4] with no 3 entry.
Geoff Hayes
on 25 Mar 2018
Gokhan - you can do
A==1
to return an array of logical values, zeros and ones, that will tell you which element of A is a one (indicated by a one) and which element of A is not a one (indicated by a zero). For example,
A = [1 2 3 4 5 1 1]
then
A==1
returns
1 0 0 0 0 1 1
And so you could then do
sum(B(A==1))
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!