Form a Cumulative sum matrix
1 次查看(过去 30 天)
显示 更早的评论
S= 10x1300
R=10x1300
z1= S1+R1 x1300
z2=S1+R1+R1+S2+R2 x1300
z3=S1+R1+R1+S2+R2+R2+S3+R3 x1300
.
.
.
z10=S1+R1+R1+S2+R2+R2+S3+R3+.. +R9+S10+R10+R10 x 1300
Result: Form z, a 10x1300 matrix
S & R is a 10x1300 matrix of random numbers
First row of matrix z= First row of S + first row of R
Second row of matrix z= First row of S + first row of R + first row of R + second row of S + second row of R + second row of R
Each addition adds Previous row of R and the next row of S and R
采纳的回答
Stephen23
2017-11-15
编辑:Stephen23
2017-11-15
>> S = randi(9,10,1300);
>> R = randi(9,10,1300);
>> Z = cumsum(S,1)+2*cumsum(R,1)-R;
>> Z(10,:) = Z(10,:)+R(10,:);
This correctly takes into account that each row Z(n,:) only adds row R(n,:) once, except for the tenth row which is a special case because R(10,:) is added twice.
Here is a complete example:
>> R = repmat((1:10).',1,3)
R =
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
10 10 10
>> S = repmat((1:3),10,1)
S =
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
>> Z = cumsum(S,1)+2*cumsum(R,1)-R;
>> Z(10,:) = Z(10,:)+R(10,:)
Z =
2 3 4
6 8 10
12 15 18
20 24 28
30 35 40
42 48 54
56 63 70
72 80 88
90 99 108
120 130 140
And checking against the given examples from rows one and three:
>> S(1,:)+R(1,:)
ans =
2 3 4
>> S(1,:)+R(1,:)+R(1,:)+S(2,:)+R(2,:)+R(2,:)+S(3,:)+R(3,:)
ans =
12 15 18
0 个评论
更多回答(2 个)
Andrei Bobrov
2017-11-15
编辑:Andrei Bobrov
2017-11-15
z = cumsum(S + 2*R) - [R(1:end-1,:); zeros(1,size(R,2))];
2 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!