How to collapse within a column vector

Hello,
I am trying to collapse a long column to a shorter one by suming across elements. For instance, if I have:
x =
1
2
3
4
5
6
7
8
9
I would like to sum up every three elements and arrive at:
y= 6
15
24
This is basically the 'collapse' function in Stata but I'm struggling to do it in Matlab. Thanks for your advide.

 採用された回答

Arthur Roué
Arthur Roué 2020 年 7 月 17 日
編集済み: Arthur Roué 2020 年 7 月 17 日

0 投票

You can use the sum function after reshape your vector into a matrix
vX = 1:9;
Interval = 3;
mX = reshape(vX, Interval, numel(vX)/Interval)
mX =
1 4 7
2 5 8
3 6 9
sum(mX)
ans =
6 15 24
/!\ reshape() won't work if the number of elements in vX is not a multiple of Interval

4 件のコメント

Ara Jo
Ara Jo 2020 年 7 月 17 日
Thank you very much -- it works well!
Ara Jo
Ara Jo 2020 年 7 月 18 日
A related question is.. how would you do it if you had a matrix rather than a column vector? For instance, if I have a 6 by 3 matrix X
X =
1 4 7
2 5 8
3 6 9
1 4 7
2 5 8
3 6 9
How could I turn this into 3 by 3 by suming up every two elements in each column and get:
Y=
3 9 15
4 10 16
5 11 17
I tried to use reshape again and it seems the matrix is sliced in an inconvinient way.. Thank you very much for your time!
Alan Stevens
Alan Stevens 2020 年 7 月 18 日
How about:
X = [1 4 7; 2 5 8; 3 6 9; 1 4 7; 2 5 8; 3 6 9];
X = X(:);
X = reshape(X,2,length(X)/2);
Y = sum(X);
Y = reshape(Y, 3, length(Y)/3);
Ara Jo
Ara Jo 2020 年 7 月 18 日
Works perfectly - thank you very much!

サインインしてコメントする。

その他の回答 (1 件)

Alan Stevens
Alan Stevens 2020 年 7 月 17 日

0 投票

One possibility is:
x = 1:12;
for i = 1:length(x)/3
p = 3*(i-1)+1;
y(i) = sum(x(p:p+2));
end

カテゴリ

ヘルプ センター および File ExchangePerformance and Memory についてさらに検索

質問済み:

2020 年 7 月 17 日

コメント済み:

2020 年 7 月 18 日

Community Treasure Hunt

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

Start Hunting!

Translated by