首页 > 其他分享 >matlab中数据结构之-cell array

matlab中数据结构之-cell array

时间:2022-09-03 11:35:38浏览次数:68  
标签: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
From: https://www.cnblogs.com/guochaoxxl/p/16652221.html

相关文章

  • 完全解析Array.apply(null, { length: 1000 })
    Array.apply(null,{length:1000})点击打开视频讲解更加详细在阅读VueJS教程时有这么段democode:render:function(createElement){returncreateElement('div'......
  • Typescript类型体操 - First of Array
    题目中文实现一个通用First<T>,它接受一个数组T并返回它的第一个元素的类型。例如:typearr1=['a','b','c']typearr2=[3,2,1]typehead1=First<arr1>//e......
  • Java集合---ArrayList
    集合和数组的区别共同点:都是存储数据的容器 不同点:数组的容量是固定的,集合的容量是可变的ArrayList的构造方法和添加方法publicArrayList()创建一个空......
  • Scan terminology - Scan cells
    1.conceptscancell是scancircuitry中最基层的、独立的单元,可同时作为controlpoint和observepoint。2.testprocscancell的工作模式可从芯片外部控制,一般......
  • JAVA进阶--常用时间API、包装类、正则表达式、Array类、Lambda表达式、常见算法--202
    第一节 Date日期对象1、日期对象如何创建,如何获取时间毫秒值Datedate=newDate();Longtime=date.getTime();2、时间毫秒值怎么恢复成......
  • [Typescript Challenges] 4. Easy - First of Array
    Implementageneric First<T> thattakesanArray T andreturnsit'sfirstelement'stype.typearr1=['a','b','c']typearr2=[3,2,1]typehead1=F......
  • MATLAB R2019b安装 及其启动慢的解决方案
       MATLAB是一款商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。可以进行矩阵运算、......
  • CF1114F Please, another Queries on Array?
    CF1114FPlease,anotherQueriesonArray?题目大意你有一个数组\(a_1,a_2,\dots,a_n\)。现在你需要完成\(q\)次操作,有以下两种操作形式:MULTIPLYlrx,对于所有\(i(......
  • 解析json array presto 语法
    示例:{data=[{"name":"col1","min":0,"max":32,"avg":29},{"name":"col2","min":1,"max":35,"avg":21},{"name":"col3","min":4,"......
  • MATLAB 读取csv文件效率对比
    1、读取文件18.9s[A,B,C]=xlsread('inv_5249_1_min.csv'); 2、读取文件5.34sCell_Datao=readtable('inv_5249_1_min.csv'); 3、读取文件1s以内file_id=fop......