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

matlab中cell数组用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 faker12 于 2021-9-18 11:02 编辑 : N8 O% f, s" |* i7 v1 i" }% M

' V( N: P; k5 x! W第一次接触cell数据是因为做一个数据处理时由于数据量太大excel的vlookup奔溃而数据库不熟练只能硬着头皮强行导入matlab匹配,其中有一列数据为年月日时分秒,还好matlab有cell数组,中间使用也遇到一些问题,现在总结一下用法方便以后复习和可能会用到的朋友。
, k( C, R0 j8 {$ [% w1 e+ C  _3 z. {. u7 ?: V/ P
cell数组一般被叫做元胞数组,它的每个单元可以储存不同的数据类型,可以是数值,字符或矩阵或元胞数组等,类似于学过的c语言里的结构体
6 |  E. U4 i+ E# Z& ?* `( \7 D: Y+ Q# c: k
1.cell数组的创建& R% E* d2 C) W/ _

% P% t3 f( R( d; J1 M可以直接通过{}类似于矩阵的直接赋值:a={'winter',123,'coming','哈哈'};% @; k' n) J; H4 _

& m- j2 s  n( r  V7 I也可以通过cell函数预分配内存,再赋值:a=cell(1,4);a={'winter',123,'coming','哈哈'};3 _% r  y7 X; U$ Q# z! L5 |* X$ \

& ?5 i. p- O! R& f- t9 w( a+ _2.cell数组的访问
) k8 T; }2 {4 ^0 n# }5 H
6 \: x% B- x( e, f' V( f) [与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他操作基本一样。
6 R5 h- O- a5 X  u# ^' B1 Q. S$ c! B: n* a" [# j

' ~( @4 C& a  C/ C3.cell数组相关的函数
$ W. u. L5 q8 P+ A1 F1 q; @! I5 R4 m1 b3 z3 J
cell:创建空的元胞数组,预分配内存% n( n# I- [# Y/ |' ~0 U

' d' q$ s" D* j/ l- Y$ c7 Ccelldisp:显示元胞数组所有内容7 C- {" Y$ B  \( \7 U- P- z
! E- {7 n* F7 b; x
cellplot:利用图形方式显示内容- P5 l' L2 c4 m6 P+ ?9 ~
) Y' N! x) z/ F$ l2 e0 [
3 a1 t% E' B9 e4 G5 w/ L
cell2mat:将元胞数组成普通矩阵(要求cell元胞数组的所有内容都必须为相同数据类型,可以为字符,会转化为字符矩阵)
; t8 G/ Y! B$ |" r2 L' i$ s5 _8 _, }/ x
6 \" o  g7 i, |. ]mat2cell:将普通矩阵转化成元胞数组2 c5 _8 g1 i3 k6 q( [

$ a. H4 C: i8 ]' Y% ~, Liscell:判断输入是否为元胞数组
: k! B0 S0 f6 C7 H9 ~# e, t2 x) `( S  w4 G; x" g4 D
cellfun:为cell数组的每个cell单元的内容执行指定的函数,fun可以是特殊的函数或者句柄
/ ~8 h0 R* v8 H  c
2 z8 |" U% Q; n' TA = cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。然后 cellfun 将 func 的输出串联成输出数组 A,因此,对于 C 的第 i 个元素来说,A(i) = func(C{i})。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和元胞数组 C 具有相同的大小。(官网解释)
1 X( F' F% K7 L7 ]0 }( e9 y8 W9 O% E" i5 k9 X/ H" G+ _& g
默认情况下,cellfun 将 func 的输出串联成数组。func 必须返回标量。如果 func 返回对象,则对象所属的类必须满足以下要求。/ s0 N( |+ D3 L$ I& N) n3 r

+ E2 j) f3 |9 x7 ~$ j3 i4 M. b支持通过对象数组的线性索引进行赋值
6 v& F1 m9 O6 I, [
! h# {# \" z& O. X6 j具有一个 reshape 方法,可返回与输入大小相同的数组5 O6 j, ^0 j1 l

- b- B+ P4 x+ P2 q如果 'UniformOutput' 名称-值对组参数的值为 false (0),则 cellfun 将以元胞数组形式返回输出。在这种情况下,func 的输出可以具有任意大小和不同的数据类型。
7 S: h; t- X% Z
# j/ E/ `+ [* m9 L9 c
6 i/ H$ D* s9 H) ib={[1,2,1];[2,1,1];[1,1,2]};+ B/ `$ f: }, l

4 D* U2 C# s2 Y0 j" D) j) sc=cellfun(@(x)(mat2str(x)),b,'un',0)& ]$ f, A9 D( n/ t& k* j! j( Y$ v
' @3 d2 L; p1 C/ l4 Q- a) {* x

$ k* T; Y) _1 {; s  x8 S; n' B; ?0 P* U- u( x

0 B" |7 w& Z: w6 f& V0 X# Q8 ?2 f
. m# B5 X1 p5 P& P4 |- }8 ~更一般的例子参见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* T7 G* Z; v: R1 v! }

* ]  F9 F6 i: u4 E, I/ |* @4.cell单元的删除: u* P7 H" w$ S

- n- u9 y: J/ ~5 [5 a( t1 S我们知道矩阵及矩阵的删除可以通过[]实现:) n# n; Z2 N& ]) @; N# c$ K

" Z- F, e" ^, ^, H1 m/ S" q9 a6 ^0 A

/ |% k1 H7 p) _元胞数组操作类似但和其赋值一样有区别,区别就在于{}和()
, I, j3 s  m& |7 o- j  p; c' ?% g# _
a={1,2,3};
! G3 d  V; w& V& j* J
- O$ v# V) m1 j9 F5 xa{1}=[];%并不能删除第一个cell单元,只是变成空值' M: t3 U. J% }- `; X) j" w

) C8 U! _0 d  a2 h0 w; Q0 Qa(1)=[];%删除第一个单元
4 i# @7 {0 a: ]$ L' c+ `  d
3 |$ @/ {0 _; }
8 C! O% i7 x9 b" N  ^9 i
a()=[];%一次性删除所有cell单元
0 x; a. T8 j, r( F, W; w! j9 h; R
( l' \6 O5 y$ S) |3 @. V$ _/ N# R& i# w2 a" P/ z

该用户从未签到

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-7-18 05:30 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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