矩阵分块及其运算

来源:互联网 发布:c语言俄罗斯方块 编辑:程序博客网 时间:2024/06/05 11:30

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

matrix 
matrix

mc 
mc{1,1} =

18    10     9 3    13    3236     3    29

mc{2,1} =

50    31    38 9    39     8 6    26    1846     2     825    50    43

mc{3,1} =

43    26    1741    17    14

mc{1,2} =

 1    3041    4125    50

mc{2,2} =

27    4544    1137     234    23 9     1

mc{3,2} =

28    2448    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函数结合即可。

0 0
原创粉丝点击