Matlab中cell2mat的使用

  binIndices是1*50的cell,每个cell是的1*n(n不定),那么cell2mat(binIndices)得到的是1*sum(cellfun(@length,binIndices))的行向量,比如{1 2 3} {4 5 6}2个cell,得到的是[1 2 3 4 5 6]的行向量。

  这样我以为是按列组织,其实不是这样的,估计是按行。

K>> aa = cell{[1;2;3] [4;5;6]}
 aa = cell{[1;2;3] [4;5;6]}              
错误: 圆括号或方括号不对称或异常。
K>> aa = cell{[1;2;3];[4;5;6]}
 aa = cell{[1;2;3];[4;5;6]}              
错误: 圆括号或方括号不对称或异常。
K>> aa = {[1;2;3];[4;5;6]}
aa = 
    [3x1 double]
    [3x1 double]
K>> bb=cell2mat(aa)
bb =
     1
     2
     3
     4
     5
     6

   ...................................................

  单纯说按行按列不好理解,直接看例子,明白就好。

K>> aa = {[1;2;3] [4;5;6]}
aa = 
    [3x1 double]    [3x1 double]
K>> bb = cell2mat(aa)
bb =
     1     4
     2     5
     3     6

  那么究竟该如何理解呢?看例子。

看matlab给的例子。
Example:
     C = {[1] [2 3 4]; [5; 9] [6 7 8; 10 11 12]};
     M = cell2mat(C)
结果:
  M =
     1     2     3     4
     5     6     7     8
     9    10    11    12

  在学习神经网络,BP网络函数里我也遇到这个问题,现在可以解释了。
  cell是元胞数组,mat是matrix的缩写。
  首先,C = {[1] [2 3 4]; [5; 9] [6 7 8; 10 11 12]};
  C元素以“;”为间隔,有两行,没一行也有两个子元素。得到
  C{1,1}=1; %为一行一列
  C{1,2}=2 3 4; %为一行三列
  C{2,1}=5
      9; %为两行一列
  C{2,2}=6 7 8
      10 11 12; %为两行三列
  上面这几个可以在matlab里运行求出来。反别将这几组数据结合起来。
  [C{1,1} C{1,2};
  C{2,1} C{2,2}];得到
  [1 2 3 4;
  5 6 7 8;
  9 10 11 12];

  笔者注:从解析可以看出就是直接按行拼接成了矩阵,但由于元宝数组内数据可以不同为,矩阵内必须同维,所以应该不是所有的元宝素组都能转化为矩阵。

  再看一个例子,a是1*50的cell,每个cell是1*26,那么cell2mat(a)是1*(50*26)的行向量,如果cell2mat(a')得到50*26。 

posted @ 2015-07-18 11:33  加拿大小哥哥  阅读(38206)  评论(0编辑  收藏  举报