矩阵分块及其运算

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

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值