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

matlab中cell数组用法

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 faker12 于 2021-9-18 11:02 编辑
3 i9 |3 Y3 _2 r/ d, Z
" X8 v$ I+ c2 Z. B+ w, \第一次接触cell数据是因为做一个数据处理时由于数据量太大excel的vlookup奔溃而数据库不熟练只能硬着头皮强行导入matlab匹配,其中有一列数据为年月日时分秒,还好matlab有cell数组,中间使用也遇到一些问题,现在总结一下用法方便以后复习和可能会用到的朋友。
/ j+ B' ]1 N' L5 `; f+ ]( t, o, B/ X
7 N8 e  B3 m3 K0 ]cell数组一般被叫做元胞数组,它的每个单元可以储存不同的数据类型,可以是数值,字符或矩阵或元胞数组等,类似于学过的c语言里的结构体, u4 L: d4 w4 T8 N, d0 ~
8 p( W' J# p9 j9 ]5 l, a
1.cell数组的创建: \9 F$ @. b; q# m# H" H' m1 Q& g. m

8 }0 s* l. |0 c, m9 T可以直接通过{}类似于矩阵的直接赋值:a={'winter',123,'coming','哈哈'};
' D- l- {9 U% n
+ m# S+ |. a# W2 {- R也可以通过cell函数预分配内存,再赋值:a=cell(1,4);a={'winter',123,'coming','哈哈'};
% u5 g: t/ M2 L1 f# I5 U$ M* s
2.cell数组的访问
: W. z2 K# I( J% [1 _! y. s0 ^! |% K  C7 t( g6 E6 x2 W
与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他操作基本一样。( Z& H: g) F3 I" q( g; W9 u3 Q( _5 V

. f2 N7 K1 c, U2 d- V% c: P: V: U# ~
1 K9 J+ Y7 Q! |/ f* v
3.cell数组相关的函数0 |) Z  g: w/ [7 v" t  w1 D: z
, G) i6 c+ c6 H: A" `: y# h7 U
cell:创建空的元胞数组,预分配内存
9 d, g- f. N! V, A" }  ~( u" X& T4 O$ W7 [- [
celldisp:显示元胞数组所有内容) {1 e# y( P7 a8 _1 h) N0 ]* M

. Q- G- b8 q" L0 Ncellplot:利用图形方式显示内容
" [  W5 P- l# N4 ?
' l% {, L# C9 ?3 j& h
$ j0 e1 |9 d& Q/ Y/ J
cell2mat:将元胞数组成普通矩阵(要求cell元胞数组的所有内容都必须为相同数据类型,可以为字符,会转化为字符矩阵)
$ r8 W* u3 m# \8 a  r( `
3 C7 X! r) j2 M6 E$ R+ Imat2cell:将普通矩阵转化成元胞数组& p- f0 Q5 p7 J& @2 K1 ?6 `
/ u' Y' d' X3 o" Z6 b. d
iscell:判断输入是否为元胞数组
9 o0 u# {3 x& V7 ~- o0 C; X9 X6 L" {3 J
cellfun:为cell数组的每个cell单元的内容执行指定的函数,fun可以是特殊的函数或者句柄. c9 x" x* z, j" n. b+ R
9 U# S0 _4 U; A: [0 q( }8 o5 f- e
A = cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。然后 cellfun 将 func 的输出串联成输出数组 A,因此,对于 C 的第 i 个元素来说,A(i) = func(C{i})。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和元胞数组 C 具有相同的大小。(官网解释)& x- C6 A' f5 F4 u2 x

( ~7 |1 h8 u: B9 y" ^/ Q$ F默认情况下,cellfun 将 func 的输出串联成数组。func 必须返回标量。如果 func 返回对象,则对象所属的类必须满足以下要求。
* J' B% V7 \4 G2 n  E9 o- k8 R# [6 h* o( _
/ E3 Q0 T, O: X5 F5 I! x支持通过对象数组的线性索引进行赋值1 M, ~2 S% R" P- R

9 L" k2 c2 i( L) x具有一个 reshape 方法,可返回与输入大小相同的数组
  R/ k4 F+ l, ]0 P4 l+ j- G0 X
- w0 j- j7 _# @' g如果 'UniformOutput' 名称-值对组参数的值为 false (0),则 cellfun 将以元胞数组形式返回输出。在这种情况下,func 的输出可以具有任意大小和不同的数据类型。# {, n- F& ]/ V5 |) g

  H3 x# X, ]% m. `& S
  a4 m% ^- f0 J3 Xb={[1,2,1];[2,1,1];[1,1,2]};
, Q4 I% }( @/ I4 B6 z/ g5 s/ ^3 p- x
c=cellfun(@(x)(mat2str(x)),b,'un',0)
1 I5 e9 l: J# A& z: B7 C4 J
$ c% \: z: h7 b' ]. A) q

. d1 c/ F2 e/ @8 V9 S5 R; ]  {
+ A6 ~8 c4 ~  h* S" n# B 8 }' `; c% w4 l7 J3 [# b
7 m8 [+ q& q( B( H
更一般的例子参见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+ x! y1 a3 X" @+ X* f5 d

+ C- F+ Z/ u0 r4.cell单元的删除- f$ y+ u, G1 D

9 G2 \$ U; q7 ?$ e我们知道矩阵及矩阵的删除可以通过[]实现:
# I6 \# D% e! d* L3 K6 N$ j; v3 {; p5 A  A: U
2 k. I2 y% g' {7 N
元胞数组操作类似但和其赋值一样有区别,区别就在于{}和()
8 o" G  i" S9 m; a# ~; p; t7 M# a- y" B5 L% L7 f, M* A" t2 t- w
a={1,2,3};
* B8 E( F* u/ X4 x: F0 v- J! Q. K
! M. u' G" F' H+ {& aa{1}=[];%并不能删除第一个cell单元,只是变成空值% u  [, A+ x# G0 H6 r

& P5 ?* V& _% ~4 ~* da(1)=[];%删除第一个单元
! }! k8 m# v  W
0 B. k# q7 g$ m0 y2 y$ Q- E

8 y6 E- y, g8 o0 {6 j5 h8 La()=[];%一次性删除所有cell单元
$ o$ o6 C' ~* i% A+ h
, j1 \1 ?6 R+ N. G1 X
# E5 q7 p  M/ V8 {6 C" V8 _8 P
  • TA的每日心情
    奋斗
    2025-1-1 15:26
  • 签到天数: 584 天

    [LV.9]以坛为家II

    4#
    发表于 2021-9-25 20:44 | 只看该作者
    LZ辛苦,学习学习

    该用户从未签到

    3#
    发表于 2021-9-18 13:40 | 只看该作者
    cell与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容

    该用户从未签到

    2#
    发表于 2021-9-18 11:01 | 只看该作者
    cell数组类似于学过的c语言里的结构体
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-23 20:23 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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