文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

在matlab中怎么创建类似字典的数据结构

2023-07-05 16:33

关注

本篇内容介绍了“在matlab中怎么创建类似字典的数据结构”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

matlab中创建类似字典的数据结构

Matlab中创建struct:

d = struct('a','1','b','2')

在Matlab中通过字符串形式的fieldname来查找value(Using Dynamic FielNames):

d.('a')d.('b')

在Matlab中修改已经存在的field的value:

d.('b')='9'

在Matlab中添加新的field:

d.('c')='3'

在Matlab中删除stuct的field:

d=struct('b', '9','c', '3', 'a', '1')d=rmfield(b,'9')

在Matlab中删除struct所有field:

d=struct()

matlab基本数据结构说明

Matlab作为早期的科研软件之一,对数据的处理有强大的功能。最近需要做信号处理相关的部分,将之前对Matlab不熟悉的数据操作熟悉一下。

最后准备附上Numpy中对两者之间基本操作的比较。

1、基本数据结构总览(仅含常用类型)

在matlab中怎么创建类似字典的数据结构

2、数值类型基本操作

2.1 数据变量的创建

doubleMatlab的默认数据类型,基本上可以满足大部分的计算任务。single和double的创建方式一致

%% 创建数组x = 10;Y = double(x);  % 转换为double型数组y = 10;%% 查看数据类型class(Y)

2.2 查看数据类型和值

函数名称函数功能
isinteger确定输入是否为整数数组
isfloat确定输入是否为浮点数组
isnumeric确定输入是否为数值数组
isnan确定那些数组为NaN
class查看数据类型

注:以上函数的返回值均为0(结果为假)或1(结果为真)

3、字符和字符串

3.1 字符串创建

% 创建字符串str = "Hello, world">>> str = "Hello, world"% 创建字符串数组str = ["Mercury" "Gemini" "Apollo";       "Skylab" "Skylab B" "ISS"]       >>> str = 2x3 string    "Mercury"    "Gemini"      "Apollo"    "Skylab"     "Skylab B"    "ISS"   % 传入参数转换为字符串数组str = string(A)   % 将输入的数组转换为字符串数组str = string(A, datetFmt)   % 将传入的A转换指定的时间格式,所以传入的A是datetime或者duration

A的输入格式决定了如何将A转换字符串数组

输入类型转换说明示例输入示例输出
char每一行变为字符串的一个标量1×3 char array 'foo'1×1 string array "foo"
cell元胞数组的每一个元素都转换为1 * 1的字符串{137,'foo'}["137" "foo"]
数值数组相当于compose的%g格式[137 3.1e-3 8.5e-6]["137" "0.0031" "8.5e-06"]
datetime要指定格式和区域设置datetime(2020,6,1)"01-Jun-2020"
逻辑数组logical 函数不接受字符串输入,因此转换是单向的。logical([0 1])["false" "true"]

注:在matlab中要区分字符和字符串的差异。

示例:

% A表示的是字符向量A = 'Four score and seven years ago'c = size(A)   >>> c = 1×2     1    30str = string(A)s = size(str)>>> s = 1×2     1     1% 通过strlength可求的str中字符串的长度n = strlength(str)>>> n = 30% 转换元胞数组A = {'Mercury','Gemini','Apollo';...     'Skylab','Skylab B','ISS'}>>> A = 2x3 cell    {'Mercury'}    {'Gemini'  }    {'Apollo'}    {'Skylab' }    {'Skylab B'}    {'ISS'   }str = string(A)>>> str = 2x3 string    "Mercury"    "Gemini"      "Apollo"    "Skylab"     "Skylab B"    "ISS"     % 转换表示数字的字符串str = ["256","3.1416","8.9e-3"]>>> str = 1x3 string    "256"    "3.1416"    "8.9e-3"X = double(str)>>> X = 1×3  256.0000    3.1416    0.0089Y = str2double(str)>>>Y = 1×3  256.0000    3.1416    0.0089

注:

erase可以删除字符串中的指定符号

str2double适用于输入参数可能是字符串数组、字符向量或字符向量元胞数组,本质上说明str2double对字符串的转换有更加广泛的适用

3.2 字符串数组的访问

按照数组访问的方式对字符串进行访问,可通过下标的方式对数组进行切片和访问。

4、结构体

结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。可以使用structName.fieldName 格式的圆点表示法来访问字段中的数据。

形式上和Python的字典的创建方式类似。但是数组的维度取决于对应值的形式,通过字段名的方式对相应的value进行访问。

4.1 创建结构体

%% 创建一个字段的结构体field = 'f';value = {'some text';         [10, 20, 30];         magic(5)};s = struct(field,value)% 查看每个元素在内容>>> ans = 'some text'ans = 1×3    10    20    30ans = 5×5    17    24     1     8    15    23     5     7    14    16     4     6    13    20    22    10    12    19    21     3    11    18    25     2     9%% 创建多个字段的结构体field1 = 'f1';  value1 = zeros(1,10);field2 = 'f2';  value2 = {'a', 'b'};field3 = 'f3';  value3 = {pi, pi.^2};field4 = 'f4';  value4 = {'fourth'};s = struct(field1,value1,field2,value2,field3,value3,field4,value4)>>> s=1×2 struct array with fields:    f1    f2    f3    f4% 输出上述字段的结果>>> s(1)ans = struct with fields:    f1: [0 0 0 0 0 0 0 0 0 0]    f2: 'a'    f3: 3.1416    f4: 'fourth'>>> s(2)ans = struct with fields:    f1: [0 0 0 0 0 0 0 0 0 0]    f2: 'b'    f3: 9.8696    f4: 'fourth'%% 创建空字段的结构体s = struct('f1','a','f2',[])>>> s = struct with fields:    f1: 'a'    f2: []%% 创建包含元胞数组的字段field = 'mycell';value = {{'a','b','c'}};s = struct(field,value)>>> s = struct with fields:    mycell: {'a'  'b'  'c'}

注:创建多个字段的结构体时value2value3 的元胞数组是 1×2 数组,因此 s 也是 1×2 数组。因为 value1 是数值数组而不是元胞数组,所以 s(1).f1s(2).f1 具有相同的内容。

类似地,因为 value4 的元胞数组具有单一元素,所以 s(1).f4s(2).f4 具有相同的内容。

4.2 结构体中的函数

函数名称函数功能
struct创建按结构体数组
fieldnames结构体的字段名称
getfield胡哦去结构体数组字段
isfield确定输入是否为结构体数组字段
orderfields结构体数组的字段顺序
rmfield删除结构体中的字段
setfield为结构体数组字段赋值
table2struct将表转换为结构体数组
struct2table将结构体数组转换为表
cell2struct将元胞数组转换为结构体数组
struct2cell将结构体转换为元胞数组

5 元胞数组

5.1 创建与访问

创建空字符串

a = cell()a = {}

5.2 转换和检查数据类型

从元胞转换

函数名称函数功能
cell2mat将元胞数组转换为普通数组
cell2struct将元胞数组转换为结构体


注:

转换为元胞

函数名称函数功能
cellstr将字符向量转变为元胞数组
mat2cell将数组转换包含子数组的元胞数组.原始数组可通过参数dimNDist划分为更小的数组。
num2cell将数组转换为相同大小的元胞数组
struct2cell将结构体转换为元胞数组
table2cell将表转换为元胞数组。元胞数组中不含字段名称。通过fieldnames函数可以得到原始结构体的字段名称

5.3 元胞数组的操作

将元胞添加到元胞数组

C = {1, 2, 3}>>> C=1×3 cell array    {[1]}    {[2]}    {[3]}C{4,4} = 44>>> C=4×4 cell array    {[       1]}    {[       2]}    {[       3]}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {0x0 double}    {[      44]}

对元胞数组的访问

C = {'one', 'twC=2×3 cell array    >>> C=2×3 cell array    {'one'}    {'two'}    {'three'}    {[  1]}    {[  2]}    {[    3]}

通过()切片

upperLeft = C(1:2,1:2)>>> upperLeft=2×2 cell array    {'one'}    {'two'}    {[  1]}    {[  2]}

通过切片修改值

% 修改第1行 1,2,3列的值C(1,1:3) = {'first','second','third'}>>> C=2×3 cell array    {'first'}    {'second'}    {'third'}    {[    1]}    {[     2]}    {[    3]}

将元胞中的数值数据抓换为数值数组

numericCells = C(2,1:3)>>> numericCells=1×3 cell array    {[1]}    {[2]}    {[3]}    numericVector = cell2mat(numericCells)>>> numericVector = 1×3     1     2     3

通过{}对元胞的特定内容访问 / 或者修改特定内容的值

% 访问元胞的值last = C{2,3}>>> last = 3C{2,3} = 300>>> C=2×3 cell array    {'first'}    {'second'}    {'third'}    {[    1]}    {[     2]}    {[  300]}

访问某一行的值并保存到数值数组中

% 访问数组中某一行的值并转换为数值数组nums = [C{2,:}]>>> nums = 1×3     1     2   300

访问元胞的多级索引

myNum = [1, 2, 3];myCell = {'one', 'two'};myStruct.Field1 = ones(3);myStruct.Field2 = 5*ones(5);C = {myNum, 100*myNum;     myCell, myStruct}     >>> C=2×2 cell array    {[ 1 2 3]}    {[100 200 300]}    {1x2 cell}    {1x1 struct   }    % 访问元胞的内容C{1,2}>>> ans = 1×3   100   200   300  c{1, 2}(1, 2)>>> ans = 2C{2,1}{1,2}>>> ans = 'two'

注:

“在matlab中怎么创建类似字典的数据结构”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯