For Loop and if statement

3 次查看(过去 30 天)
Zain Abbas
Zain Abbas 2021-11-10
编辑: Kevin Holly 2021-11-10
Can someone explain how can use for loop for a data where i have 4 columns as shown below and for each of 3 categories i want to sum the the corresponding x y and z values?
x y z category
9 6 7 1
7 8 6 2
9 1 2 1
5 7 8 3
8 5 1 2

回答(1 个)

Kevin Holly
Kevin Holly 2021-11-10
编辑:Kevin Holly 2021-11-10
m = [9 6 7 1
7 8 6 2
9 1 2 1
5 7 8 3
8 5 1 2];
a=[];
for i=1:3
a = [a; [sum(m(m(:,4)==i,1:3),1) i]];
end
a
a = 3×4
18 7 9 1 15 13 7 2 5 7 8 3
Breakdown:
m(:,4)==1
ans = 5×1 logical array
1 0 1 0 0
The above creates a logical array of all row in the matrix (m) where the 4 column is equal to 1.
The specific elements within the matrix were selected as m(rows,columns). A colon (:) was used for rows, indicating to select all rows, which in this case was 5. This could also be describe as an array from 1 to 5 or 1:5. For the columns, only the 4th was selected, thus you end up with m(:,4).
m(:,4)
ans = 5×1
1 2 1 3 2
Now, let's look at the first three columns 1 through 3.
m(:,1:3)
ans = 5×3
9 6 7 7 8 6 9 1 2 5 7 8 8 5 1
Let's use the logical array to select only the one where the 4th column in matrix m is equal to one.
m(m(:,4)==1,1:3)
ans = 2×3
9 6 7 9 1 2
Now, let's sum the columns.
sum(m(m(:,4)==1,1:3),1)
ans = 1×3
18 7 9
Now, let's add the 4th column back by concatenating with a bracket.
[sum(m(m(:,4)==1,1:3),1) 1]
ans = 1×4
18 7 9 1
Finally, replace the 1 with an i and create a for loop to calculate for catergories 1 through 3. The variable a is created to hold the results in a single matrix. Each result is appended as a row.
a=[];
for i=1:3
a = [a; [sum(m(m(:,4)==i,1:3),1) i]];
end
a
a = 3×4
18 7 9 1 15 13 7 2 5 7 8 3

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by