当前位置: 首页 > news >正文

MATLAB核心数据类型详解:标量、矩阵、字符串与结构体

文章目录

    • 标量、向量、矩阵
    • 数值类型
    • 字符(char)与字符串(string)
    • 逻辑值(logical)
    • 单元数组 cell
    • 结构体 struct
    • 表格 table
    • 时间类型 datetime
    • 类型转换

MATLAB的数据类型体系和大多数编程语言不太一样——它以矩阵为基本数据单元,所有数据在底层都是矩阵。搞清楚各种数据类型的用途和区别,是写出高质量MATLAB代码的基础。

标量、向量、矩阵

MATLAB里,一个普通数字就是1×1的矩阵,这不只是概念上的说法,是真实的存储方式:

a=5;% 标量(1x1矩阵)b=[1,2,3];% 行向量(1x3矩阵),逗号或空格分隔c=[1;2;3];% 列向量(3x1矩阵),分号换行d=[123;456];% 2x3矩阵% 查看维度size(d)% 返回 [2, 3]size(d,1)% 行数:2size(d,2)% 列数:3numel(d)% 总元素数:6

生成特殊矩阵:

zeros(3,4)% 全零矩阵ones(2,3)% 全1矩阵eye(4)% 单位矩阵rand(3)% 均匀分布随机矩阵,值在[0,1]之间randn(3)% 标准正态分布随机矩阵linspace(0,1,5)% 等间距向量:[0, 0.25, 0.5, 0.75, 1]0:0.5:2% 冒号语法:[0, 0.5, 1.0, 1.5, 2.0]

数值类型

MATLAB默认所有数值都是double(64位双精度浮点),绝大多数情况下直接用就行。只有在处理大规模数据或图像时,才需要考虑用其他类型节省内存:

类型说明字节取值范围
double双精度浮点(默认)8±1.8×10^308
single单精度浮点4±3.4×10^38
int8有符号8位整数1-128 ~ 127
uint8无符号8位整数10 ~ 255
int32有符号32位整数4-2^31 ~ 2^31-1
logical逻辑值10 或 1
a=single(3.14);% 转为单精度b=uint8(200);% 无符号整数,图像处理常用c=true;% 逻辑值class(a)% 查看类型,返回 'single'isa(a,'single')% 判断类型,返回 1(true)

整数运算注意溢出:

x=uint8(200);x+100% 结果是255,而不是300,溢出时自动截断

字符(char)与字符串(string)

MATLAB有两套文本处理系统,用途略有不同:

char字符数组(旧写法,兼容性好):

c='hello MATLAB';c(1)% 'h',按字符索引c(7:end)% 'MATLAB',切片length(c)% 12,字符个数% 字符数组拼接greeting=['hello',' ','world'];% 字符与数字互转double('A')% 65(ASCII码)char(65)% 'A'

string字符串对象(R2016b起,功能更强):

s="hello MATLAB";s2="hello"+" "+"world";% 用+拼接strlength(s)% 12,字符长度% 字符串数组sa=["苹果","香蕉","橙子"];sa(2)% "香蕉"contains(sa,"蕉")% [0, 1, 0]% 格式化字符串n=42;msg=sprintf("结果是%d", n);

推荐原则:

  • 新代码优先用string,函数更丰富
  • 需要兼容老代码或老版本MATLAB,用char
  • stringchar之间可以互转:string('abc')char("abc")

逻辑值(logical)

逻辑值只有true(1)和false(0)两种:

a=5>3% trueb=10==10% truec=7~=7% false,~= 是"不等于"% 逻辑运算a&&b% 短路与(&&),用于标量a&b% 逐元素与(&),用于数组~a% 非% 逻辑索引(非常实用)x=[3,7,2,9,4,6];x(x>5)% [7, 9, 6],取出大于5的元素x(x<5)=0% 把小于5的元素清零

逻辑索引是MATLAB数据处理的核心技巧之一,能替代大量循环判断,写出简洁高效的代码。


单元数组 cell

cell 数组的特点是:每个元素可以是不同类型、不同大小的数据。适合存储结构不一致的数据集合。

% 创建cell数组c={42,'hello',[123],true};% 访问元素:花括号取内容c{1}% 42(数字)c{2}% 'hello'(字符数组)c{3}% [1 2 3](向量)% 花括号 vs 圆括号c{2}% 取出内容本身(字符数组)c(2)% 取出一个1x1的cell,内容是字符数组% 修改某个元素c{1}='changed';% 二维cellnames={'张三','李四';'王五','赵六'};names{1,2}% '李四'

cell 的常见用途:

  • 批量文件名列表
  • 不同长度向量的集合
  • 混合类型的参数传递
% 实际用例:存储多次实验数据(每次数据长度不同)results=cell(5,1);fori=1:5results{i}=rand(1,randi([10,20]));% 每次长度不同end

结构体 struct

结构体按字段名存储数据,逻辑更清晰,适合描述有多个属性的事物:

% 创建结构体s.name='实验一';s.date=datetime('2024-06-01');s.data=[1.2,2.3,3.1,2.8];s.sampleRate=1000;% 访问字段s.name% '实验一's.data(2:end)% [2.3, 3.1, 2.8]% 结构体数组(多个实验结果)fori=1:3experiments(i).id=i;experiments(i).result=rand(1,10);endexperiments(2).result% 第2个实验结果% 列出所有字段名fieldnames(s)% 动态字段访问(字段名是变量时很有用)fieldName='name';s.(fieldName)% 等价于 s.name

结构体比cell更适合描述参数包、实验记录等有固定属性的数据。当工程越来越大,结构体比散装变量管理起来方便太多。


表格 table

table 是专为表格数据设计的类型,每列有名字,适合处理 Excel 表格类的数据:

% 创建tablename={'张三';'李四';'王五'};age=[22;25;28];score=[88.5;92.0;76.3];T=table(name,age,score);% 查看数据Thead(T,2)% 只显示前2行% 按列名访问T.score T{:,'score'}% 提取数值% 按条件筛选行T(T.score>80,:)% 新增计算列T.grade=T.score/100;% 与Excel交互writetable(T,'result.xlsx')T2=readtable('data.xlsx')

实际项目里,从Excel读数据进来处理,再写回去,table是最顺手的工具。


时间类型 datetime

处理时序数据时,datetime 比手动管理时间字符串方便很多:

t=datetime('2024-01-15 08:30:00',...'InputFormat','yyyy-MM-dd HH:mm:ss');% 当前时间now_t=datetime('now');% 时间差dt=now_t-t;% duration类型dt.Days% 相差天数hours(dt)% 转换为小时数% 生成时间序列t_series=datetime(2024,1,1)+hours(0:23);% 与数字相互转换datenum(t)% 转为MATLAB日期数值datetime(738000,'ConvertFrom','datenum')

类型转换

不同类型之间经常需要转换:

double(int32(5))% int32转doubleint32(3.7)% double转int32,会四舍五入为4char(65)% 数值转字符:'A'string(3.14)% 数值转字符串:"3.1400"num2str(3.14,'%.2f')% 格式化转字符串:"3.14"str2double("3.14")% 字符串转数值:3.14logical(0)% 0转falselogical([1020])% 向量转逻辑:[1 0 1 0]
http://www.jsqmd.com/news/1302789/

相关文章:

  • 163MusicLyrics:免费跨平台歌词下载工具完整指南
  • 我早就说过-----------不要搬运大公司的东西---上海王某侵犯《繁花》等四千余部影视著作权获刑
  • 2026高铁底盘螺栓防松该用哪种垫圈?第三方场景选型观察 - 行业百科测评
  • 2027.7.31
  • 广州经济犯罪辩护律师推荐:【法纳刑辩】专业权威 - 松梢月冷
  • 信号与系统-数学公式
  • AI外呼小范围试点先上线哪些能力,才能验证任务流程和实际效果?
  • 悍途户外创始人刘良斌:以自研国货为基,布局海内外全域渠道
  • 2026年国内金属装饰网厂家排行 解决选型迷茫 适配多元场景 - 甄选测评馆
  • 解放双手!三月七小助手:你的星穹铁道全自动日常伴侣
  • 哈尔滨瓷砖美缝公司怎么选?多方调研对比,这家本地老店值得优先考虑 - 专注室内空气检测治理
  • OSS/BSS系统安全防护实战:数据库透明加密与计费系统数据脱敏落地
  • 如何用TUIOSimulator轻松实现跨平台多点触控开发?
  • 我国启动大模型IPv6能力提升专项行动,装修时家庭网络该怎样提前布线?
  • Python深度学习与大模型开发实战指南
  • LLaMA-Factory训练可视化:Loss曲线与指标监控
  • OpenCore Legacy Patcher终极指南:让旧Mac焕发新生,免费升级到最新macOS系统
  • 2026 年至今,秀城专业的护工培训供货商推荐,给家里请护工的人,居然没人知道这玩意儿藏着这么多门道?-娘子帮母婴 - 鉴选官
  • 2026丽水定制柜颜色怎么选未来之境采光差这3色显大耐脏 - 科技先行者
  • 2026年新化耐酸碱快速加热陶瓷片订制厂家严选:从工艺到服务全方位盘点 - geo交流
  • 手把手:用 WorkBuddy + 可视化编排把腾讯混元 Hy3 封装成计费 API
  • 7月自动化运维能力自评:脚本编排、CI/CD与GitOps的熟练度矩阵与8月提升方向
  • 广州经济犯罪辩护律师哪个优秀:【法纳刑辩】值得信赖 - 秋山寄远
  • 如何用AI解放你的视频剪辑时间:FunClip让语音识别成为你的剪辑助手
  • 2026年国内口碑稳定的铜件加工厂家排行 - 甄选测评馆
  • 如何告别微信桌面端的烦恼:weweChat带来的6种革命性沟通体验
  • 爱奇艺广告文字识别正常------可以继续
  • PDF批量处理技术深度解析:自动化文档处理实战指南
  • 老旧Mac重生指南:3步解锁现代macOS完整体验
  • 闲鱼快递价格怎么省?实操方法与避坑指南 - 快递物流实时资讯