How to sum by 3d array?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Tiina
am 6 Jan. 2016
Kommentiert: Andrei Bobrov
am 8 Jan. 2016
Hi,
I have the following sample columns structured in a 3D array of 2 pages (:,:,1) and (:,:,2). I want to produce out1 as a sum of 2 rows as indicated by s over page 1. That is, s is 2 sum 2 rows of data(this occurs on page 1 as indicated by idx1, if s is 3 sum 3 rows of data... idx1 is an index of each page that rolls over all rows, idx2 is the the row number. I cannot use permute/reshape as the rows in each page changes significantly in the actual data set. Could you please advise? Thanks
idx1=[1 1 1 1 2 2 2 2 2]';
idx2=[ 1 2 3 4 1 2 3 4 5]';
s=[2 2 2 2 3 3 3 3 3]';
data=[10 11 9 13 2 4 3 1 3]';
out1= [nan 21 20 22 nan nan 9 8 7]';
out2=[nan 2 3 4 nan nan 3 4 5]'
0 Kommentare
Akzeptierte Antwort
Andrei Bobrov
am 6 Jan. 2016
Bearbeitet: Andrei Bobrov
am 6 Jan. 2016
out1 = cell2mat(accumarray(idx1,(1:numel(data))',[],...
@(x){[nan(s(x(1))-1,1);conv2(data(x),ones(s(x(1)),1),'valid')]}));
out2 = idx2;
out2(isnan(out1))=nan;
2 Kommentare
Andrei Bobrov
am 8 Jan. 2016
[~,~,c] = unique(idx1);
idx2 = cell2mat(accumarray(c,1,[],@(x){(1:numel(x))'}));
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Matrices and Arrays 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!