1. 程式人生 > >MATLAB 矩陣分塊函式 mat2cell 及 cellfun 函式

MATLAB 矩陣分塊函式 mat2cell 及 cellfun 函式

為了清理桌面上的 words, so do this!

在做一個專案的時候,接觸到了這個函式,瞬間感覺好有用,遂記錄之。(好像有點廢話……)

mat2cell 函式就是將矩陣轉化成胞元陣列(cell array),用數學的語言講就是矩陣分塊。其意義和用法可以用 matlab 的幫助文件說清楚:

這裡寫圖片描述

cellfun 函式就是對每一個塊做相同的操作,例如求和、求均值等等,用這個函式就避免了寫 for 迴圈了,也算是 matlab 向量化運算的一個例子。下面用一個例子說明之。

% 生成一個 10*5 的隨機矩陣,矩陣取值在 0 到 50 內的整數
matrix = randi(50, 10, 5);
%
轉換成胞元陣列 mc = mat2cell(matrix, [3 5 2], [3 2]); % 求每一塊的所有元素之和 sum_of_everyone = cellfun(@(x) sum(x(:)), mc)

matrix
matrix

mc
mc{1,1} =

18    10     9
 3    13    32
36     3    29

mc{2,1} =

50    31    38
 9    39     8
 6    26    18
46     2     8
25    50    43

mc{3,1} =

43    26    17
41    17    14

mc{1,2} =

 1    30
41    41
25    50

mc{2,2} =

27    45
44    11
37     2
34    23
 9     1

mc{3,2} =

28    24
48    48

每一塊的和
sum_of_everyone =

 153   188
 399   233
 158   148

OK,該睡覺了!明天還要考最坑爹的模式識別~

END