zoukankan      html  css  js  c++  java
  • 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。 

  • 相关阅读:
    Python—re模块
    Python—json模块
    Python—sys模块介绍
    Python—os模块介绍
    Python—randonm模块介绍
    Python—time模块介绍
    Python—包介绍
    Python—模块介绍
    Python—装饰器
    jvm、jre、jdk
  • 原文地址:https://www.cnblogs.com/hxsyl/p/4655104.html
Copyright © 2011-2022 走看看