找回密码
 注册
关于网站域名变更的通知
查看: 484|回复: 3
打印 上一主题 下一主题

matlab中cell数组用法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-9-18 09:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 faker12 于 2021-9-18 11:02 编辑
  X& ~7 Z# k7 f0 T8 x# a& N) L' V1 a- w6 g, z
第一次接触cell数据是因为做一个数据处理时由于数据量太大excel的vlookup奔溃而数据库不熟练只能硬着头皮强行导入matlab匹配,其中有一列数据为年月日时分秒,还好matlab有cell数组,中间使用也遇到一些问题,现在总结一下用法方便以后复习和可能会用到的朋友。
3 h9 J3 O" {+ V# {# E9 l: }4 R/ h$ i, q; v1 ?
cell数组一般被叫做元胞数组,它的每个单元可以储存不同的数据类型,可以是数值,字符或矩阵或元胞数组等,类似于学过的c语言里的结构体% I6 Z2 [  h7 H' \8 d7 j
  J5 p+ y! v/ N5 k% D. P% y
1.cell数组的创建* C+ B' w) I6 p  H4 @
8 p0 b' W/ L" X$ Q4 ]+ \1 a- ?7 G
可以直接通过{}类似于矩阵的直接赋值:a={'winter',123,'coming','哈哈'};7 r" G% @- P6 W% v% ?
' z& g: H( ?* W" ~$ [
也可以通过cell函数预分配内存,再赋值:a=cell(1,4);a={'winter',123,'coming','哈哈'};
5 i+ ^% ]7 g0 x! N
3 [5 s, K- l, W2 B' v* y4 k) Q2.cell数组的访问
, L. G4 L" k* g# V
5 M: Q3 A1 z  r与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他操作基本一样。
5 c! D+ }# r  M2 \
6 i- p" [: g% u; t! C
9 ]" K2 k* o' I7 f, O
3.cell数组相关的函数
9 x' M9 L0 k8 [; Z
) M- ]( p0 z0 {  m! ]4 e5 C3 qcell:创建空的元胞数组,预分配内存
6 M# Q/ n0 s$ ]" r: {
8 x; m3 v- |  `/ B5 N1 Fcelldisp:显示元胞数组所有内容
" c. a. f: G  }, y) V2 x6 p& H7 M( m, s  z. w
cellplot:利用图形方式显示内容
6 K" G, [. t; y5 b
* I9 j( q4 b4 c' d3 Y; Z( K  z: u* N8 |

: ^  r' z7 a7 F. @$ N/ @cell2mat:将元胞数组成普通矩阵(要求cell元胞数组的所有内容都必须为相同数据类型,可以为字符,会转化为字符矩阵)
8 P# d0 m5 p3 M, s3 A" }$ d0 }7 {- Q- U2 t+ `& C; T6 M
mat2cell:将普通矩阵转化成元胞数组' D% z/ `) f& C0 v1 C
  _( G7 o: x' P- b# x2 d! q
iscell:判断输入是否为元胞数组* u5 C# }+ E& [, x+ T, k6 O% `

; |( G/ Z4 S$ lcellfun:为cell数组的每个cell单元的内容执行指定的函数,fun可以是特殊的函数或者句柄9 b( l+ E* s7 f! y; q8 D- P5 `

* J  z) [+ C9 b4 ?- ?6 ]; F, kA = cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。然后 cellfun 将 func 的输出串联成输出数组 A,因此,对于 C 的第 i 个元素来说,A(i) = func(C{i})。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和元胞数组 C 具有相同的大小。(官网解释)
, Q9 d( L; v- }' F7 V/ G9 U4 \$ A" z- J4 b  H% [4 z; E) L0 M6 _
默认情况下,cellfun 将 func 的输出串联成数组。func 必须返回标量。如果 func 返回对象,则对象所属的类必须满足以下要求。# @- O" N/ M- i/ ?

0 ~+ ]# Q9 d" V- G/ n支持通过对象数组的线性索引进行赋值+ D4 p2 R) Y7 R9 s: A5 u! p1 M* a

2 x) H- d% p; ?1 e/ O" F具有一个 reshape 方法,可返回与输入大小相同的数组9 o* M( y4 }0 Y$ M0 t

6 Q( s. o; S, K9 a- i8 c. |如果 'UniformOutput' 名称-值对组参数的值为 false (0),则 cellfun 将以元胞数组形式返回输出。在这种情况下,func 的输出可以具有任意大小和不同的数据类型。
& k) d' N7 n' y8 O/ K  z
& B2 n+ w( u3 Z. L, \: A& W/ G! _$ I$ @; _  B6 ^: r
b={[1,2,1];[2,1,1];[1,1,2]};
0 L; S4 X& ~9 M8 F2 A4 r6 v# W  m3 Y9 ]
! Q" c6 ]$ y" e1 T; m2 |# Qc=cellfun(@(x)(mat2str(x)),b,'un',0)% Y/ u: V! `$ I% X6 {7 j+ f; B1 J

0 L2 C  W7 u/ Z  ~
  R3 Z" Q4 M4 ^  F9 |' r3 {2 j

8 e  m+ ]+ ~2 J# D8 i, c# k
* V- ^& e/ y6 ~( G4 M* x9 a) {: P+ {0 X. J/ B; c
更一般的例子参见https://cn.mathworks.com/matlabcentral/answers/99632-how-do-i-save-a-cell-array-that-contains-both-strings-and-numbers-to-an-ascii-file-in-matlab
$ d6 @: Y2 g5 ^4 `9 B6 ]/ N
( a8 e2 Y$ y0 ?: h) l% h8 \4.cell单元的删除
  V% j8 Z3 Z1 m0 |. |, y! e. v8 _
) l  G$ {: W" N8 F' I2 w. i我们知道矩阵及矩阵的删除可以通过[]实现:) f. L2 v* V- E7 [# d6 F
) }+ ?% X( ~- m* B9 L+ q
* E; i  K5 K1 e" v$ M4 F
元胞数组操作类似但和其赋值一样有区别,区别就在于{}和()
$ E" {% r4 f6 M4 f0 D* U; R( V
a={1,2,3};
5 W% Z# [4 I1 R6 y) T5 }7 r6 N$ |
: t3 J! s! |) G1 H# q& G8 ea{1}=[];%并不能删除第一个cell单元,只是变成空值- }9 d& w& F, }% c  k  p! a) S

- e3 G9 o  }4 J# Va(1)=[];%删除第一个单元2 C  C7 Z+ ^( P( E; K  I9 v* P
4 v& p/ z2 |3 W( H, ?7 @4 ?

! W6 E" q- x. U9 ga()=[];%一次性删除所有cell单元, y4 E( X' r8 r2 U, |

$ ~" [& X- z+ b" T' [
# ]8 x: Z0 i% O7 L

该用户从未签到

2#
发表于 2021-9-18 11:01 | 只看该作者
cell数组类似于学过的c语言里的结构体

该用户从未签到

3#
发表于 2021-9-18 13:40 | 只看该作者
cell与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容
  • TA的每日心情
    奋斗
    2025-1-1 15:26
  • 签到天数: 584 天

    [LV.9]以坛为家II

    4#
    发表于 2021-9-25 20:44 | 只看该作者
    LZ辛苦,学习学习
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-28 22:11 , Processed in 0.156250 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表