How to find cumulative sum from from-to matrix?
18 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
If A is from-to matrix and B is route
A =[0 10 20 30; 40 0 50 60; 70 80 0 90; 100 110 120 0],
B = [1 2 3 4;2 4 3 1]
How to find cumulative sum
C = [0 (0+10) (0+10+50) (0+10+50+90); 0 (0+60) (0+60+120) (0+60+120+70)]
C = [0 10 60 150; 0 60 180 250]
0 commentaires
Réponse acceptée
DGM
le 10 Mai 2022
From the other comment:
A = [0 10 20 30; 40 0 50 60; 70 80 0 90; 100 110 120 0];
B = [1 2 3 4;2 4 3 1];
% x (1,2) (2,3) (3,4) x (2,4) (4,3) (3,1)
%C = [0 (0+10) (0+10+50) (0+10+50+90); 0 (0+60) (0+60+120) (0+60+120+70)]
%C = [0 10 60 150; 0 60 180 250]
% each column of BB is a row,col subscript pair into A
% each page of BB corresponds to each row of B
BB = repelem(B,1,2);
BB = reshape(permute(BB(:,2:end-1),[3 2 1]),2,[],size(B,1));
% convert to linear indices
BB = permute(sub2ind(size(A),BB(1,:,:),BB(2,:,:)),[3 2 1]);
% do sum and pad
C = cumsum(A(BB),2);
C = [zeros(size(C,1),1) C]
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices 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!