MATLAB元胞数组

2023-11-12

MATLAB元胞数组

元胞数组:

    元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。

     1)元胞数组的创建

>> a={'matlab',20;ones(2,3),1:10}

a =

    'matlab'            [20]
    [2x3 double]    [1x10 double]

>> b=[{'matlab'},{20};{ones(2,3)},{1:10}]

b =

    'matlab'            [20]
    [2x3 double]    [1x10 double]

>> c={10}

c =

    [10]

>> c(1,2)={2}

c =

    [10]    [2]

>> c(2,2)={5}

c =

    [10]    [2]
      []    [5]

>> isequal(a,b)

ans =

     1

>> whos
Name      Size            Bytes Class      Attributes

a         2x2               388 cell                 
ans       1x1                 1 logical              
b         2x2               388 cell                 
c         2x2               208 cell   

cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。    

>> a=cell(1)

a =

    {[]}

>> b=cell(1,2)

b =

     []     []

>> c=cell(3,3)

c =

     []     []     []
     []     []     []
     []     []     []

>> d=cell(2,2,2)

d(:,:,1) =

     []     []
     []     []

 

d(:,:,2) =

     []     []
     []     []

>> whos
Name      Size             Bytes Class      Attributes

a         1x1                  4 cell                 
ans       1x1                  1 logical              
b         1x2                  8 cell                 
c         3x3                 36 cell                 
d         2x2x2               32 cell   

 

   2)元胞数组的数据获得

    从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号{}。大括号中数值表示元胞的下标。如a{12}表示元胞数组中第一行第二列的元胞。

>> a={20,'matlab';ones(2,3),1:3}

a =

    [20]                 'matlab'    
    [2x3 double]    [1x3 double]

>> str=a(1,2)

str =

    'matlab'

>> class(str)

ans =

cell

>> str=a{1,2}

str =

matlab

>> class(str)

ans =

char

()和{}有着本质的区别,大括号用于表示元胞的内容,小括号表示指定的元胞。

a =

    [20]                 'matlab'    
    [2x3 double]    [1x3 double]

 

>> a{2,1}(2,2)

ans =

    0.9134

>> a{2,1}(2,3)

ans =

    0.0975

>> a{1,2}(2)

ans =

a

使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。

>> a=[{1},{2},{3};{4},{5},{6};{7},{8},{9}]

a =

    [1]    [2]    [3]
    [4]    [5]    [6]
    [7]    [8]    [9]

>> b=a(2:3,2:3)

b =

    [5]    [6]
    [8]    [9]

>> c=a(1:3,2:3)

c =

    [2]    [3]
    [5]    [6]
    [8]    [9]

 

     本例使用元胞下标的方式创建了新的元胞数组bc,通过结果看出bc就是元胞数组a的一部分。

     3)元胞数组的删除和重塑

     要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩阵即可。   

a={20,'matlab';ones(2,3),1:3}

a =

    [20]                 'matlab'    
    [2x3 double]    [1x3 double]

>> a(1,:)=[]

a =

    [2x3 double]    [1x3 double]

>> a={20,'matlab';ones(2,3),1:3};
>> a{1}=[]

a =

              []    'matlab'    
    [2x3 double]    [1x3 double]

>> a(1)=[]

a =

    [2x3 double]    'matlab'    [1x3 double]

>> a(2)=[]

a =

    [2x3 double]    [1x3 double]

>> a(1,2)=[]
 A null assignment can have only one non-colon index.

>> a(1)=[]

a =

    [1x3 double]

     元宝数组和其他数组一样,也可以通过reshape函数改变形状,改变后的元胞数组与原元胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。

>> a=cell(4,4)

a =

     []     []     []     []
     []     []     []     []
     []     []     []     []
     []     []     []     []

 

>> size(a)

 

ans =

     4     4

>> b=reshape(a,2,8)

b =

     []     []     []     []     []     []     []     []
     []     []     []     []     []     []     []     []

>> size(b)

ans =

     2     8

     5)元胞数组中的操作函数

      cell:创建空的元胞数组

      cellfun:为元胞数组的每个元胞执行指定的函数

      celldisp:显示所有元胞的内容

      cellplot:利用图形方式显示元胞数组

      cell2mat:将元胞数组转变成为普通的矩阵

      mat2cell:将数值矩阵转变成为元胞数组

      num2cell:将数值数组转变成为元胞数组

      deal:将输入参数赋值给输出

      cell2struct:将元胞数组转变成为结构

      struct2cell:将结构转变为元胞数组

      iscell:判断输入是否为元胞数组

     

>> a={20,'matlab',3-7i;ones(2,3),1:3,0}

a =

    [        20]    'matlab'        [3.0000 - 7.0000i]
    [2x3 double]    [1x3 double]    [               0]

>> b=cellfun('isreal',a)

b =

     1     1     0
     1     1     1

>> c=cellfun('length',a)

c =

     1     6     1
     3     3     1

>> d=cellfun('isclass',a,'double')

d =

     1     0     1
     1     1     1

(函数的应用)

    cellfun函数的主要功能是对元胞数组的元素(元胞)分别指定不同的函数,不过,能够在cellfun函数中使用的函数ushuliang是有限的。  

    能在cellfun中使用的函数:

    isempty:若元胞元素为空,则返回逻辑真

    islogical:若元胞元素为逻辑类型,则返回逻辑真

    isreal:若元胞元素为实数,则返回逻辑真

    length:元胞元素的长度

    ndims:元胞元素的维数

    prodofsize:元胞元素包含的元素个数

    7)元胞数组的嵌套

    元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。

  

>> a=cell(1,2)

a =

     []     []

>> a(1,2)={cell(2,2)}

a =

     []    {2x2 cell} 

>> a(1,1)={magic(3)}; 

a{1,2}(1,1)={[1 2 3;4 5 6;7 8 9]};
a{1,2}(2,1)={[2-i;4+7i]};
a{1,2}(2,2)={cell(1,2)};
a{1,2}{2,2}(2)={5};
>> cellplot(a)

      8)元胞数组与数值数组间的转化

      应用循环,可以将元胞数组转化为数值数组。

如何初始化元胞数组

比如申请了2*2的元胞,希望初始化为每个元胞都是[0 0 0]

 

cell  Create cell array.

 

    cell(N) is an N-by-N cell array of empty matrices.

 

 

 

    cell(M,N) or cell([M,N]) is an M-by-N cell array of empty

 

    matrices.

 

 

 

    cell(M,N,P,...) or cell([M N P ...]) is an M-by-N-by-P-by-...

 

    cell array of empty matrices.

 

 

 

    cell(SIZE(A)) is a cell array the same size as A containing

 

all empty matrices.

 

>>d=cell(2);

 

>>d(:)={[0]};

 

 

>> d = cell(2, 2);

 

>> d

 

d =

 

     []     []

 

     []     []

 

>> d(:) = {[0 0 0]}

 

d =

 

    [1x3 double]    [1x3 double]

 

    [1x3 double]    [1x3 double]

 

>> celldisp(d)

 

 

 

d{1,1} =

 

 

 

     0     0     0

 

 

 

d{2,1} =

 

 

 

     0     0     0

 

 

 

d{1,2} =

 

 

 

     0     0     0

 

 

 

d{2,2} =

 

 

 

     0     0     0

 

 

>> a = {[0 0 0]};

 

>> b = repmat(a, 2, 2)

 

b =

 

    [1x3 double]    [1x3 double]

 

    [1x3 double]    [1x3 double]

 

>> celldisp(b)

 

 

 

b{1,1} =

 

 

 

     0     0     0

 

  

 

b{2,1} =

 

 

 

     0     0     0

 

  

 

b{1,2} =

 

 

 

     0     0     0

 

  

 

b{2,2} =

 

 

 

     0     0     0

 

 

转载于:https://www.cnblogs.com/AI-Algorithms/p/3669861.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB元胞数组 的相关文章

  • Matlab 中的 3D 堆叠条形图

    我想在一个图中绘制多个堆叠条形图 detached 条形图 例如 准确地想象一下bar http mathworks com help matlab ref bar3 detached png绘图 但堆叠在一起 而不是单一颜色 Set up
  • 将值从 C++ MEX 文件返回到 MATLAB

    我正在编写一个从 C 代码中检索数据的 MATLAB 程序 为此 我在 MATLAB 中创建了一个 MEX 文件和一个网关 mexFunction 虽然可以在 MATLAB 中读取读取值 但我无法检索它来使用它 如果不清楚 我有与这里完全相
  • 计算向量的导数

    我有以下函数 维维亚尼曲线 Phi t cos t 2 cos t sin t sin t 只需检查它是否有效 s linspace 0 T 1000 plot3 cos s 2 cos s sin s sin s 如何推导函数Phi 可能
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • Python 中 Matlab 'fscanf' 的等价物是什么?

    Matlab函数fscanf 似乎很强大 python 或numpy 中是否有相同的等效项 具体来说 我想从文件中读取矩阵 但我不想迭代每一行来读取矩阵 类似的东西 来自 matlab 用于读取 2D 1000x1000 矩阵 matrix
  • Matlab的uicontrol在Octave中的实现?

    我正在尝试在 Octave 中运行我们实验室中使用的图形程序的 m Matlab 代码 Octave 告诉我代码中使用的函数 uicontrol 没有定义 经过一番搜索 我发现 JHandles 包有一个 uicontrol GUI 功能的
  • 当 MATLAB 变得非常非常忙时,如何中断它?

    我正在运行一个长时间的模拟MATLAB http en wikipedia org wiki MATLAB我意识到我需要停下来重新运行 然而 MATLAB 确实对这种计算很感兴趣 并且它停止了响应 如何在不终止 MATLAB 的情况下中断此
  • 了解 Matlab 中的 DEL2 函数以便用 C++ 对其进行编码

    为了用 C 编写 DEL2 matlab 函数 我需要了解该算法 我已经成功地为不在边界或边缘上的矩阵元素编写了函数 我已经看过几个有关它的主题 并通过输入 edit del2 或 type del2 来阅读 MATLAB 代码 但我不明白
  • Matlab 的 fftn 在多线程下变得更慢?

    我可以访问 12 核机器和一些严重依赖 fftn 的 matlab 代码 我想加快我的代码速度 由于 fft 可以并行化 我认为更多的内核会有所帮助 但我看到的恰恰相反 这是一个例子 X peaks 1028 ncores feature
  • 继续在 Matlab 中一遍又一遍地播放声音?

    我正在尝试创建一个 MATLAB 程序来每隔几分钟一遍又一遍地播放声音 现在我将其设置为每隔几秒播放一次 只是为了消除系统中的一些错误 但是 当我的程序尝试重播声音时 我收到此错误 Error using gt audioplayer au
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA
  • 如何将条形图的 XtickLabels 向左移动?

    我目前正在尝试创建频率直方图 为此 我必须创建一个条形图 条形图之间没有空格 然而 这集中于XTickLabels在酒吧的中间 由于它是一个直方图 我希望数值位于每个条形之间的线上 以便它可以直观地指示间隔 本质上 我需要将所有刻度标签移至
  • 在 3d 空间中的两个平面之间进行插值

    我正在开发一种工具 可以让您在 3D 体积 上圈出 包围事物 我想通过标记 切片 1 和 3 并从该信息 填充 切片 2 来节省时间 两个简单的解决方案是 1 slice2 slice1 AND slice3 gets the overla
  • 对多个属性使用一种设置方法 MATLAB

    我有几个属性基本上使用相同的属性set method classdef MyClass properties A B end methods function mc MyClass a b Constructor mc A a mc B b
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • 如何让MCR启动时间快

    我将 matlab 程序转换为 net 程序集 即 dll 文件 我制作了一个控制台 C 应用程序 添加了 dll 文件并从 php 调用它 每次调用 exe 时都会调用 MCR 如何使 MCR 在服务器启动时初始化 并且即使在一段时间后调
  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函
  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构
  • 将自动生成的 Matlab 文档导出为 html

    我想为我开发的 Matlab 工具箱生成完整的帮助 我已经看到如何显示自定义文档 http www mathworks fr fr help matlab matlab prog display custom documentation h

随机推荐

  • 如何获取使用某个table的所有存储过程

    select distinct object name id from syscomments where id in select object id from sys objects where type P and text like
  • 目标识别、目标跟踪算法总结

    想自学图像处理的相关知识 正好实验室师兄做过两个关于红外目标跟踪的项目 因此从mean shift SR RP PF开始学习 但是查阅资料的时候 发现对各种算法理解非常 利用图像处理算法 实现的功能一般包括 目标的检测 识别 跟踪 常见的问
  • 机器学习顶刊文献_哪些成为了经典-引用次数最多的10篇机器学习文献

    近40年来机器学习领域产生了数以万计的论文 并以每年上万篇的速度增长 但真正能够称为经典 经受住历史检验 能投入实际应用的并不多 本文整理了机器学习历史上出现的经典论文 按照被引用次数对它们进行了排序 分为top10 被引用次数超过2万 被
  • FreeModbus的移植

    FreeModbus V1 6 主机使用说明 一 简述 FreeModbus是一款开源的Modbus协议栈 但是只有从机开源 主机源码是需要收费的 同时网上也没有发现比较好的开源的Modbus主机协议栈 所以才开发这款支持主机模式的Free
  • 【Docker】使用Docker在远程服务器上安装MySQL8并使用本地navicat连接

    使用Docker在远程服务器上安装MySQL8并使用本地navicat连接 一 下载MySQL8镜像 二 启动MySQL容器 三 配置MySQL数据库的远程访问 使用本地navicat连接服务器MySQL 四 docker中删除已创建的容器
  • 虚拟机使用情况(持续更新)

    装了虚拟机后今天打开发现文字变成了英文的 并且装好的系统打不开机 出现提示 本来用的好好的 怎么就出问题了呢 回忆起来最后使用时为了方便整理磁盘 把安装在E盘的所有虚拟机文件都放在一个命名文件里 我恢复原样后就正常使用了 可能是之前下载的时
  • 操作系统之PV操作

    基本概念 进程状态 进程通常分为就绪 运行和阻塞三个工作状态 三种状态在某些条件下可以转换 三者之间的转换关系如下 进程三个状态之间的转换就是靠PV操作来控制的 PV操作主要就是P操作 V操作和信号量 其中信号量起到了至关重要的作用 信号量
  • 微信小程序分享页面代码

    在微信小程序中实现分享功能需要以下几个步骤 1 在 app json 文件中配置分享参数 例如标题 路径等 示例如下 json pages pages index index window navigationBarTitleText 小程
  • java print\println\printf的区别

    printf主要是继承了C语言的printf的一些特性 可以进行格式化输出 print就是一般的标准输出 但是不换行 print将它的参数显示在命令窗口 并将输出光标定位在所显示的最后一个字符之后 println www infocool
  • 源NAT,目的NAT和PAT以及端口映射的区别?

    一 NAT 1 动态NAT 地址复用 指将内部私有IP转换为公网IP地址时 IP的对应关系是不确定的 也就是说只要指定哪些内部地址可以进行NAT转换 以及哪些可以的合法的IP地址可以作为外部地址 就可以进行动态转换了 也可以使用多个合法地址
  • unity3d运行后自动暂停_Unity3D 关于延迟、暂停执行脚本的几个方法总结

    1 InvokeRepeating函数 和 Invoke函数 个人认为最为有效方法 用法 InvokeRepeating delayOpen 1 5 1秒后调用 delayOpen 函数 之后每5秒调用一次 写在Start函数内 Invok
  • python实现时间序列信号的频谱、倒频谱以及功率谱

    python实现时间序列信号的频谱 倒频谱以及功率谱 认识傅里叶变换 一 频谱 1 引入库 2 频谱函数封装 二 功率谱 功率谱谱函数封装 三 倒频谱 倒频谱谱函数封装 以振动信号为例 认识傅里叶变换 这里我就不多说了 百度谷歌一大堆说的明
  • /sys/module/ 模块信息 目录与/proc/modules文件

    在内核模块编译中 会选择编译成模块 或者build in 内核镜像中 其中对内核模块有很好的的说明 这也是linux在嵌入式当中得到广泛应用的充分体现 内核中有很多功能选项 其中有许多使我们不需要的 内核设计成模块的优势所在就在这里 不需要
  • Android java.lang.UnsatisfiedLinkError: No implementation found

    例如 该项目的如下报错 java lang UnsatisfiedLinkError No implementation found for void org webrtc PeerConnectionFactory nativeIniti
  • Python 环境变量配置详解

    文章目录 1 配置前准备 1 1 检查环境变量是否配置成功 1 2 查询 python exe 的安装路径 2 配置步骤 2 1 进入高级系统设置 2 2 设置环境变量 2 1 1 配置 Python exe 所在路径 2 2 1 配置 p
  • GIT 仓库 子模块 SUBMODULE 拉取子仓库代码

    找到 gitmodules 文件所在的目录 在该目录下运行命令 git submodule init git submodule update
  • DNS请求响应

    问题背景 在无线网络可用 而有线网络不可用的场景下 依靠第三方接口解析域名 或者udp tcp接口内部解析域名 会默认阻塞10秒钟 办法 自行定制dns请求及响应 BOOL SendDNSRequest sockaddr in sockAd
  • Low Memory Killer

    oom score adj 计算方法 oom score adj oom adj OOM SCORE ADJ MAX OOM DISABLE OOM SCORE ADJ MAX 1000 OOM DISABLE 17 其中 oom adj
  • c# mysql 二进制图片_C#将image中的显示的图片转换成二进制

    1 将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是 二进制数据 因此必须将图像文件转换成字节数组才能存入数据库中 View Code 将本地图片转换成二进制保存起来 private byte SetImageT
  • MATLAB元胞数组

    MATLAB元胞数组 元胞数组 元胞数组是MATLAB的一种特殊数据类型 可以将元胞数组看做一种无所不包的通用矩阵 或者叫做广义矩阵 组成元胞数组的元素可以是任何一种数据类型的常数或者常量 每一个元素也可以具有不同的尺寸和内存占用空间 每一