如何将cell阵列中的资料个别做计算matlab?

如题所述

  个别引用cell里面的元素,其实和引用一般的矩阵元素相似,只是不用小括号而用大括号
  a{1,2}这就可以引用a中1行二列的元素,如果元素本身是一个一般的数据矩阵,那么可以
  a{1,2}(1,2)引用cell矩阵a中1行2列的元素中(该元素是个一般数据矩阵)的1行2列的数
  按照这样的引用,不难对cell矩阵中每个单元中的数据去做相应的操作
  而对整个cell矩阵每个元素都操作的话,也不难用循环去实现

  对于整个cell矩阵每个元素都要进行相同操作的时候后
  可以用cellfun实现,效率要比用循环高
  例如,我们要求cell矩阵中每一个元素的长度(假设原来每一个元素都是矩阵),那么可以
  b=cellfun(@length,a);
  b就会返回一个形状和a一样的矩阵,由于length返回一个标量,所以b退化为一般的数据矩阵
  b中的每一个数,对应于a中相应位置矩阵的长度

  我们也可以自己设定函数,让cellfun将函数实施于cell矩阵的每一个元素
  例如你要求 每个cell的(对角元素和+1)/4,那么可以这样
  func=@(x) (sum(diag(x))+1)/4;
  b=cellfun(func,a);
  那么b就是a中每个矩阵的 (对角和+1)/4
  这里的func我用了匿名函数
  你也可以直接写一个函数m文件

  其实就是把你要对其中每一个数组的操作写成一个函数
  y=func(x) (利用输入数组x计算产生结果y的函数func)

  b=cellfun('func',a);
  其实等价于
  for i=1:size(a,1)
  for j=1:size(a,2)
  b(i,j)=func(a{i,j});
  end
  end
  只是用cellfun的书写效率和运行效率都比用循环的效率高

  注意,如果你的函数y=func(x) 返回的y不是一个标量值
  而是矩阵,字符串,cell数组等不单单占一个存储空间的数据时
  要设置cellfun的输出形式UniformOutput为0
  b=cellfun('func',a,'UniformOutput',0);
  这时候b也是一个cell矩阵了,每个元素是根据a中计算的结果
  例如a中的元素都是3x3的矩阵,现在要求其每个矩阵的逆矩阵
  b=cellfun(@inv,a,'UniformOutput',0);
温馨提示:答案为网友推荐,仅供参考
相似回答