Add data of a matrix based on an other matrix

4 Ansichten (letzte 30 Tage)
Philipp Wirtz
Philipp Wirtz am 11 Mai 2018
Kommentiert: Philipp Wirtz am 11 Mai 2018
I would like to add a certain amount of data points of one matrix in a new matrix, based on a third matrix. It is because I need to add data points from one day (it is not predefined how many datapoints there are going to be) and then go to the next day and do the same. This is the code I tried for now.
if true
% code
A = [1 1 1 2 2 2 3 4 5 6 6 6 7 8 9 10]; % Matrix that tells from which day data point of B is
B = rand(1,16).*100; % random data times 100 to get bigger numbers
i = 1; % variable used in the while loop
j = 1; % variable used in the while loop
C = []; % new matrix to store the summed data points for each day (it should become a 1x10 matrix in this specific case
while A(i) == i
while A(i) == i
C(1,i) = C(1,i) + B(1,j)
j = j + 1;
end
i = i + 1;
end
end
Hoping to find an answer. - Philipp

Akzeptierte Antwort

Stephen23
Stephen23 am 11 Mai 2018
Bearbeitet: Stephen23 am 11 Mai 2018
Loops are not required. One easy way would be to use accumarray:
>> A = [1 1 1 2 2 2 3 4 5 6 6 6 7 8 9 10];
>> B = rand(1,16);
>> C = accumarray(A(:),B(:))
C =
1.090191
1.127991
0.044079
0.483190
0.890956
0.136439
0.025175
0.364094
0.165231
0.917592
>> size(C)
ans =
10 1
For MATLAB releases >= R2015b you could use splitapply.
  1 Kommentar
Philipp Wirtz
Philipp Wirtz am 11 Mai 2018
Thank you so much for the fast answer! That was just what I was looking for.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Ameer Hamza
Ameer Hamza am 11 Mai 2018
splitapply(@sum, B, A)

Cathal Cunningham
Cathal Cunningham am 11 Mai 2018
Use logical indexing to do this
% Pre-build array
C = zeros(1,size(unique(A),2));
for i = 1:length(C)
C(i) = sum(B(A==i));
end

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by