11-3 h}CBz

許多用於向量和矩陣的數學運算,例如 sum、max、min、mean 等,也都可以用在多維陣列,但是要特別注意,在使用這些指令時,我們必須指定這些指令的操作是在哪一個維度,例如:

Example 1: 11-多維陣列/sum01.mA = [1 1 1 1; 2 2 2 2; 3 3 3 3]; B = [0 0 0 0; 1 1 1 1; 1 2 3 4]; Z = cat(3, A, B); % 將矩陣 A, B 疊成一個三維陣列 S = sum(Z, 1) % 根據第一維度來對元素進行相加 size(S) S(:,:,1) = 6 6 6 6 S(:,:,2) = 2 3 4 5 ans = 1 4 2

在上述範例中,矩陣 Z 的大小是 3×4×2,sum(Z, 1) 是根據第一個維度來進行相加,因此第一個維度值就會被壓成是 1,因此 size(S) 所傳回的值是 [1, 4, 2],代表矩陣 S 的大小是 1×4×2。此外,sum(Z) 的預設相加維度即是 1,因此 sum(Z) 和 sum(Z, 1) 所得到的結果是一樣的。

若要對第二個維度進行相加,可見下列範例。

Example 2: 11-多維陣列/sum02.mA = [1 1 1 1; 2 2 2 2; 3 3 3 3]; B = [0 0 0 0; 1 1 1 1; 1 2 3 4]; Z = cat(3, A, B); % 將矩陣 A, B 疊成一個三維陣列 S = sum(Z, 2) % 根據第二維度來對元素進行相加 size(S) S(:,:,1) = 4 8 12 S(:,:,2) = 0 4 10 ans = 3 1 2

在上述範例中,sum(Z, 2)是對第二個維度進行相加運算,因此所傳回的矩陣 S 的維度是 3×1×2。(在本書的範例程式中,sum03.m 是對 Z 的第三個維度進行相加運算,請讀者自己試試看。)

在上述範例中,我們可以想像 S = sum(Z, 1) 是先作用在 Z 的每一頁,然後再將結果堆疊起來,成為一個三維陣列 S。同樣的想法,也可以應用在 S = sum(Z, 2)。

要注意的是,如果所要相加的維度只有單一維度,那麼 sum 指令會對下一個維度進行相加的動作,因此(承襲上述範例)sum(sum(Z)) 將會得到三維陣列 Z 的每一頁的總和,請見下列範例。

Example 3: 11-多維陣列/sumSum01.mA = [1 1 1 1; 2 2 2 2; 3 3 3 3]; B = [0 0 0 0; 1 1 1 1; 1 2 3 4]; Z = cat(3, A, B); % 將矩陣 A, B 疊成一個三維陣列 S = sum(sum(Z)) S(:,:,1) = 24 S(:,:,2) = 14

同理,若要得到陣列 Z 的所有元素總和,可用 sum(sum(sum(Z))) 或是 sum(Z(:)),在此不再贅述。

與 sum 類似的指令還有 max、min、mean、median、mode、std、diff、sort 等,讀者可以參考本書第九章「矩陣的處理與運算」的第三小節「矩陣的數學運算」。


MATLAB程式設計:入門篇