mat2cell函数就是将矩阵转化成胞元数组(cell array),用数学的语言讲就是矩阵分块。其意义和用法可以用matlab的帮助文档说清楚:
而cellfun函数就是对每一个块做相同的操作,例如求和、求均值等等,用这个函数就避免了写for循环了,也算是matlab向量化运算的一个例子。下面用一个例子说明之。
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
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
对每个分块进行运算,利用cellfun函数。
例2:求上述各个分块的平均值。
>> C=cellfun(@mean,cellfun(@mean,B,'UniformOutput',false))
C =
3 5
9 11
注意最里面的mean是求各块列平均,需要再平均一次才得到每一分块的总平均。应为最里面的mean运算后得到的是cell矩阵,所以false掉‘UniformOutput’参数。外面的一个mean运算得到的是数组,就不需要这样做了(默认的是不false)
例3:求上述各分块的总和。
>> D=cellfun(@sum,cellfun(@sum,B,'UniformOutput',false))
D =
12 20
36 44
这个例子展示了cell型矩阵的运算并不需要用新的函数,只是需要将对应的矩阵运算符与cellfun函数结合即可。