• matlab中数据结构之cell array


      不同与matlab中的array数据结构中存储的都是一样的数据,cell array中可以存储不同的数据类型,而且cell array也可以是向量或矩阵,数组中不同的元素指向不同的数值。原来主要用来存储不同长度的字符串,cell arrays存储的是指向存储数据的指针。

    1.直接创建创建cell arrays,将所有元素用{}包围即可,可以成vector或matrix均可

    行向量:

    cellrowvec={23, 'a', 1:2:9, 'hello'}
    结果:cellrowvec =
      1×4 cell array
        {[23]}    {'a'}    {[1 3 5 7 9]}    {'hello'}

    列向量:

    cellcolvec={23; 'a'; 1:2:9; 'hello'}
    结果:cellcolvec =
      4×1 cell array
        {[       23]}
        {'a'        }
        {[1 3 5 7 9]}
        {'hello'    }

    矩阵:

    cellmat = {23, 'a'; 1:2:9, 'hello'}
    结果:cellmat =
      2×2 cell array
        {[       23]}    {'a'    }
        {[1 3 5 7 9]}    {'hello'}

    2.cell array元素的引用,名称{index1, [index2]}, 如果元素是vector时,还需要继续索引才能取得vector中的真正的元素值,最后一个元素,索引可以用end

    直接一次索引:

    cellcolvec{1}
    结果:ans =
        23

    需要二次索引时

    cellcolvec{end}
    只一次索引:ans =
        'hello'
    cellcolvec{end}(2)
    二次索引:ans =
        'e'

    若为矩阵可以用一个下标,按照列优先原则排成线性表;也可以直接用两个下标:

    一个下标

    cellmat{4}(2)
    结果:ans =
        'e'

    两个下标

    cellmat{2,2}(2)
    ans =
        'e'

    倘若是最后一个,也可以用end索引:

    cellmat{end}(2)
    结果:ans =
        'e'

    补充:使用cell函数创建空的cell array,通过对其引用进行赋值:

    mycellmat=cell(2,2)
    结果:mycellmat =
      2×2 cell array
        {0×0 double}    {0×0 double}
        {0×0 double}    {0×0 double}

    创建空的cell array成功,

    mycellmat{1,1}=23
    mycellmat =
      2×2 cell array
        {[      23]}    {0×0 double}
        {0×0 double}    {0×0 double}
    >> mycellmat{1,2}='a'
    mycellmat =
      2×2 cell array
        {[      23]}    {'a'       }
        {0×0 double}    {0×0 double}
    >> mycellmat{2,1}=1:2:9
    mycellmat =
      2×2 cell array
        {[       23]}    {'a'       }
        {[1 3 5 7 9]}    {0×0 double}
    >> mycellmat{2,2}='hello'
    mycellmat =
      2×2 cell array
        {[       23]}    {'a'    }
        {[1 3 5 7 9]}    {'hello'}

    也可以整体赋值:

    mycellmat = cellmat
    mycellmat =
      2×2 cell array
        {[       23]}    {'a'    }
        {[1 3 5 7 9]}    {'hello'}

    {}是cell索引,()是内容索引

    cellmat{2,1}
    ans =
         1     3     5     7     9
    >> cellmat{2,1}(4)
    ans =
         7

    可以获取子集

    cellcolvec{2:3}
    ans =
        'a'
    ans =
         1     3     5     7     9
    或者:
    [c1, c2] = cellcolvec{2:3}
    c1 =
        'a'
    c2 =
         1     3     5     7     9

    甚至:

    [c1, c2] = cellmat{2:3}
    c1 =
         1     3     5     7     9
    c2 =
        'a'

    4.删除cell array元素

    cellrowvec
    原始:cellrowvec =
      1×4 cell array
        {[23]}    {'a'}    {[1 3 5 7 9]}    {'hello'}
    >> cellrowvec(2)=[]
    删除索引为2的元素:cellrowvec =
      1×3 cell array
        {[23]}    {[1 3 5 7 9]}    {'hello'}
    >> cellrowvec(2)=[]
    再次删除索引为2的元素:cellrowvec =
      1×2 cell array
        {[23]}    {'hello'}

    如果是矩阵类型的cell array,矩阵操作依旧能用:

    cellmat
    数据:cellmat =
      2×2 cell array
        {[       23]}    {'a'    }
        {[1 3 5 7 9]}    {'hello'}
    >> cellmat1 = cellmat
    准备1:cellmat1 =
      2×2 cell array
        {[       23]}    {'a'    }
        {[1 3 5 7 9]}    {'hello'}
    >> cellmat2 = cellmat
    准备2:cellmat2 =
      2×2 cell array
        {[       23]}    {'a'    }
        {[1 3 5 7 9]}    {'hello'}
    >> cellmat1(1,:)=[]
    删除一行:cellmat1 =
      1×2 cell array
        {[1 3 5 7 9]}    {'hello'}
    >> cellmat2(:,1)=[]
    删除一列:cellmat2 =
      2×1 cell array
        {'a'    }
        {'hello'}

    5.cell array中存储string,不同长度

    cvnames = {'Sue', 'Cathy', 'Xavier'}
    cvnames =
      1×3 cell array
        {'Sue'}    {'Cathy'}    {'Xavier'}

    特征:

    strlength(cvnames)
    每个字符串长度:ans =
         3     5     6
    >> size(cvnames)
    cell array大小:ans =
         1     3

    用string函数将cell array转换成string array

    stnames = string(cvnames)
    stnames = 
      1×3 string array
        "Sue"    "Cathy"    "Xavier"

    与之相反,可以用cellstr函数完成string到cell转换:

     cellstr(stnames)
    ans =
      1×3 cell array
        {'Sue'}    {'Cathy'}    {'Xavier'}

    字符串处理函数strsplit和strjoin函数,前者是分割,后者是合并:

    da = date
    da =
        '03-Sep-2022'
    >> strsplit(da, '-')
    ans =
      1×3 cell array
        {'03'}    {'Sep'}    {'2022'}
    >> sd = strsplit(da, '-')
    sd =
      1×3 cell array
        {'03'}    {'Sep'}    {'2022'}
    >> jd = strjoin(sd, '/')
    jd =
        '03/Sep/2022'

    判断cell中元素是否为string的函数iscellstr

    iscellstr(cvnames)
    ans =
      logical
       1
    >> iscellstr(cellcolvec)
    ans =
      logical
       0
  • 相关阅读:
    imx6------watchdog导致不进系统
    嵌入式 Linux 如何操作 GPIO ?
    Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
    一张图看懂AI、机器学习和深度学习的区别
    男生拍照姿势大全,这样拍才帅
    OpenCV/OpenCL/OpenGL区别
    设计简单算法体验Vivado HLS的使用
    FMC简介
    Android 开机Process xxx (pid xxxx) has died问题分析
    g711u与g729比较编码格式
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/16652221.html
Copyright © 2020-2023  润新知