How to sum n lines of a matrix to another matrix?

2 vues (au cours des 30 derniers jours)
Pedro Vicente
Pedro Vicente le 23 Sep 2018
So basically, i have a matrix Apit with the index of (51*n,5,1000) and what i wanted is another matrix TotalApit, with the index (51,5,1000), that sums up 'n' lines by 'n' lines.
like:
if n = 2, Apit(102,5,1000) and TotalApit(51,5,1000)
TotalApit(1,1,1) = Apit(1,1,1)+Apit(2,1,1)
TotalApit(2,1,1) = Apit(3,1,1)+Apit(4,1,1)
So i want that 1 line of TotalApit correspond the sum of n lines of Apit
Can someone help me?
  2 commentaires
Image Analyst
Image Analyst le 23 Sep 2018
Explain how the first indexes (row number) are determined on the right hand side. Like why row is 1 and 2 in the first equation, and 3 and 3 (the same) in the second equation. What rule are you using to determine which rows to sum?
And, this is not a big array, just a simple for loop would work, though there are more efficient ways.
Pedro Vicente
Pedro Vicente le 23 Sep 2018
Oh, damn, that was my bad. Should be Apit(3,1,1)+Apit(4,1,1)
I want each line of TotalApit to sum n lines of Apit.

Connectez-vous pour commenter.

Réponse acceptée

Image Analyst
Image Analyst le 23 Sep 2018
You could do this:
Apit = rand(102,5,1000);
TotalApit = zeros(51,5,1000);
% Now do the sum
[rows, columns, slices] = size(Apit)
n = 2;
tic
k = 1;
for row = 1 : n : rows-n
thisVolume = squeeze(Apit(row:(row+n-1), :, :));
thisSum = sum(thisVolume, 1);
TotalApit(k, :, :) = thisSum;
k = k + 1;
end
toc
Takes a hundreth of a second on my computer. You might be able to do it even faster with convn(). And it would be only 1 or 2 lines of code.

Plus de réponses (1)

Kaushik Lakshminarasimhan
Kaushik Lakshminarasimhan le 23 Sep 2018
n=2;
TotalApit = reshape(sum(reshape(Apit,[n 102/n 5 1000])),[102/n 5 1000]);

Catégories

En savoir plus sur Operating on Diagonal 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!

Translated by