作者KingSteven (HHung)
看板MATLAB
標題[問題] summation
時間Fri Jan 3 11:06:37 2014
假設我有一個vector [1 2 3 4 5 6 7 8 9] (實際上數字沒有大小順序或規則)
我想要三個三個加在一起
變成[6 15 24]
我目前只想到用迴圈
可是感覺可以有更聰明更快的方法(看能不能用sum之類的)
想請較大家
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.135.192
1F:推 kurt28:sum(reshape(vector,[],3)) 01/03 11:11
2F:→ KingSteven:其實我是要加總三維的vector,複雜很多. 01/03 11:20
3F:→ KingSteven:不過sum(reshape(......))這概念不錯,感覺可行 01/03 11:20
4F:推 kurt28:我剛剛是想說用成cell 再用cellfun去運作@@ 01/03 11:21
5F:→ kurt28:不過好像有點多此一舉 如果維度確定的話 用sum(..,dim)也ok 01/03 11:22
6F:→ KingSteven:我是要加總一個維度(120,160,92)的東西,希望用(4,4,4) 01/03 12:18
7F:→ KingSteven:的cube做加總,所以我reshape成(4,30,4,40,4,23) 01/03 12:19
8F:→ KingSteven:然後再sum(sum(sum(...,1),3),5).這樣應該沒錯吧?! 01/03 12:20
9F:推 kurt28:這應該可以再化簡 我會從維度那邊去下手 01/03 12:30
10F:推 YoursEver:h = ones(4,4,4); convn( data, h, 'same'); 01/08 12:46
11F:→ YoursEver:h = ones(4,4,4); temp = convn( data, h, 'same'); 01/08 12:47
12F:→ YoursEver:result = temp(2:4:end, 2:4:end, 2:4:end); 01/08 12:47
13F:→ YoursEver:邊界的位置要留意一下...上一行的寫法邊界會有問題. 01/08 12:51
14F:→ YoursEver:說錯,不是邊界位置,是起始位置要確認一下. 01/08 14:57
15F:→ KingSteven:大概懂樓上的意思,用convolution的概念 01/08 15:11
16F:→ KingSteven:不過目前用sum(reshape(...))最簡潔,只有兩行 01/08 15:12