ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

matlab中数据结构之-cell array

2022-09-03 11:31:02  阅读:185  来源: 互联网

标签:cellmat 23 cell matlab ans array hello


  不同与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

 

标签:cellmat,23,cell,matlab,ans,array,hello
来源: https://www.cnblogs.com/guochaoxxl/p/16652221.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有