How to sum by 3d array?

2 vues (au cours des 30 derniers jours)
Tiina
Tiina le 6 Jan 2016
Commenté : Andrei Bobrov le 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]'

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 6 Jan 2016
Modifié(e) : Andrei Bobrov le 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 commentaires
Tiina
Tiina le 8 Jan 2016
Thanks Andrei, just a quick question if i dont have idx2, how do i recover it from a 3d array if i had idx1, s and data?
Andrei Bobrov
Andrei Bobrov le 8 Jan 2016
[~,~,c] = unique(idx1);
idx2 = cell2mat(accumarray(c,1,[],@(x){(1:numel(x))'}));

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by