Lee's Space Station

MATLAB 矩阵分块函数 mat2cell 及 cellfun 函数

2016/01/11 Share

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

在做一个项目的时候,接触到了这个函数,瞬间感觉好有用,遂记录之。(好像有点废话……)

mat2cell 函数就是将矩阵转化成胞元数组(cell array),用数学的语言讲就是矩阵分块。其意义和用法可以用 matlab 的帮助文档说清楚:

这里写图片描述

cellfun 函数就是对每一个块做相同的操作,例如求和、求均值等等,用这个函数就避免了写 for 循环了,也算是 matlab 向量化运算的一个例子。下面用一个例子说明之。

1
2
3
4
5
6
% 生成一个 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

CATALOG
  1. 1. END