Add Cells/Matrices Row by Row

2 views (last 30 days)
Avik Mahata
Avik Mahata on 13 Aug 2021
Edited: dpb on 13 Aug 2021
I have a large number of matrices/vectors. And I need to add then row by row. So I have 100 different 50x10 matrices. Now I want to add Row 1 (first cell) + Row 1 (second cell)+...., and repeat it for all 60 rows and get a final 50x10 matrix. I have them all in cell format.
  2 Comments
Avik Mahata
Avik Mahata on 13 Aug 2021
Thanks for taking time to reply. Below is the details. Any suggestions will be extremely helpful for my reserach.
Well here is the problem, I have a large matrix of about 600,000 rows and 14 coulumns. This data is a 6000 different bins with 100 columns each. So what I am trying to do is add (Row1 + Row101+ Row201....+..), (Row2 + Row 102+ Row 202 + ....) and get a final matrix of 100x14.
I am trying to elaborate more below,
a=rand(12,2)
a =
0.5862 0.1559 % Row 1
0.6509 0.7744 % Row 2
0.8756 0.7171 % Rowl 3
0.3699 0.7807 % Row 4
0.5258 0.6832 % Row 5
0.0857 0.9956 % Row 6
0.0644 0.5571 % Row 7
0.1754 0.6236 % Row 8
0.6654 0.6843 % Row 9
0.4061 0.1972 % Row 10
0.7061 0.8972 % Row 11
0.3061 0.9720 % Row 12
Now what I wanted to do is to bin 4 rows together. So we have 3 bins like below,
Bin 1
0.5862 0.1559 % Row 1
0.6509 0.7744 % Row 2
0.8756 0.7171 % Rowl 3
0.3699 0.7807 % Row 4
Bin 2
0.5258 0.6832 % Row 5
0.0857 0.9956 % Row 6
0.0644 0.5571 % Row 7
0.1754 0.6236 % Row 8
Bin 3
0.6654 0.6843 % Row 9
0.4061 0.1972 % Row 10
0.7061 0.8972 % Row 11
0.3061 0.9720 % Row 12
Now what I wanted to do is take a average of the (Row1+ Row 5+ Row 9), (Row 2+ Row 6 + Row 10) and so on. Once I add them up I will end up with a matrix of , 4x 2.
What I trying is create a loop llike below hoping that the loop repeats 100 times and create 100 rows. But its not doing it somehow. I am doing something wrong in the loop.
clc
clear all
M=dlmread('segmentaf');
M(1:101:end,:) = [];
L = length(M);
for x = 1:1:100
for a = 1:100:(L-101)
for b = a+100
Q = M(a:b,13);
end
Q3 = Q1+Q2;
end
end

Sign in to comment.

Answers (1)

dpb
dpb on 13 Aug 2021
"matrix of about 600,000 rows and 14 columns. This data is a 6000 different bins with 100 columns each. So what I am trying to do is add (Row1 + Row101+ Row201....+..), (Row2 + Row 102+ Row 202 + ....) and get a final matrix of 100x14. "
Using your smaller example, but same logic works, the "dead ahead" solution is
>> x=rand(12,2) % some sample data
x =
0.8147 0.9572
0.9058 0.4854
0.1270 0.8003
0.9134 0.1419
0.6324 0.4218
0.0975 0.9157
0.2785 0.7922
0.5469 0.9595
0.9575 0.6557
0.9649 0.0357
0.1576 0.8491
0.9706 0.9340
>>
% the engine
N=4; % number of elements in group
M=size(x,1)/N; % number of bins -- must be evenly divisible
S=zeros(M,size(x,2); % preallocate
for i=1:M
S(i,:)=sum(x(i:N:end,:));
end
Show what we got...
>> S
S =
2.4046 2.0347
1.9682 1.4368
0.5631 2.4416
>>
>> x(1,1)+x(5,1)+x(9,1) % illustrate first term gets right answer...
ans =
2.4046
>>
  2 Comments
dpb
dpb on 13 Aug 2021
Edited: dpb on 13 Aug 2021
So, switch N from 4 to 3 -- but that's not what your example asked...
"Now what I wanted to do is to bin 4 rows together. So we have 3 bins like below, "
The logic is generic regardless of the size as long as size(data,1)/N is integer.
>> N=3; % changed mind, groups of 3, not four
>> M=size(x,1)/N; % compute # bins given N
>> S=zeros(M,2); % preallocate again
>> for i=1:M,S(i,:)=sum(x(i:N:end,:));end % and compute
>> S % what we get
S =
2.9715 1.9270
2.2426 2.7158
2.1526 3.3057
2.1568 0.9698
>> x(1,1)+x(4,1)+x(7,1)+x(10,1) % again, just check got it right...
ans =
2.9715
>>

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!