MATLAB 矩陣分塊函式 mat2cell 及 cellfun 函式
阿新 • • 發佈:2019-01-01
為了清理桌面上的 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
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,該睡覺了!明天還要考最坑爹的模式識別~