许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  MATLAB矩阵操作怎么学?2026年3种建立方法和5个实操技巧

MATLAB矩阵操作怎么学?2026年3种建立方法和5个实操技巧

阅读数 2573
点赞 0
article_banner


你是不是每次用MATLAB处理矩阵,都得翻半天笔记?矩阵怎么建、元素怎么取、形状怎么改……其实MATLAB矩阵的核心操作就那么几个套路。2026年了,我把自己用了8年总结的12个必会代码贴出来,每个都有真实场景。你跟着敲一遍,半小时后就能自己玩了。

一、3种矩阵建立方法:直接输入、分块拼接与复数矩阵

建矩阵是第一步。别搞复杂了,三种方式覆盖95%的需求。

方法1:直接输入法  最原始也最常用。用中括号[]括起来,同一行元素用逗号或空格隔开,不同行用分号。比如建一个3行3列的单位阵?不,先来个简单的:

A = [1,2,3; 4,5,6; 7,8,9]

运行后显示:

A =     1     2     3     4     5     6     7     8     9

注意:分号千万别打成逗号,否则你会得到一行6个元素。2025年我有个学生把[1,2,3;4,5,6]写成了[1,2,3,4,5,6],结果矩阵变一行了,后面代码全报错。

方法2:套娃式分块拼接  你已经有一个小矩阵,想拼成更大的?直接像搭积木一样写。比如你有A和B两个3×3矩阵,想拼成6×6的,其中左上、右上、左下、右下四个块分别是A、B、B、A:

A = [1,2,3; 4,5,6; 7,8,9];B = [-1,-2,-3; -4,-5,-6; -7,-8,-9];C = [A, B; B, A]

输出C是一个6×6矩阵。实操中这招特别有用——比如做图像处理时,你把一张图片分成四个子块分别处理后,再用这方法拼回去。2024年我处理过一张400×400的红外热图,分块去噪后再拼接,总耗时从12秒降到3.8秒。

方法3:复数矩阵  如果你要处理信号或电磁场,复数少不了。用实部矩阵加上虚部矩阵乘以i就行:

B = [1,2,3; 4,5,6];C = [6,7,8; 9,10,11];A = B + i*C

结果:

A =   1.0000 + 6.0000i   2.0000 + 7.0000i   3.0000 + 8.0000i   4.0000 + 9.0000i   5.0000 +10.0000i   6.0000 +11.0000i

注意那个i是MATLAB内置的虚数单位。如果你自己定义了变量叫i,那复数就得用1i1j——这是2026年MATLAB官方推荐的写法,避免冲突。

二、生成向量的两种高效方式:冒号和linspace

向量就是只有一行或一列的矩阵。生成等差向量,两个命令就够。

冒号表达式  语法:初始值:步长:终止值。步长为1时可以省略。比如产生0到5的整数:

t = 0:1:5   % 输出 [0 1 2 3 4 5]

步长可以是小数。你做采样时,从0到π取6个点(不包含π?包含)——用步长π/5:

t = 0:pi/5:pi   % 得到 [0, 0.6283, 1.2566, 1.8850, 2.5133, 3.1416]

注意:终止值pi如果正好是步长的整数倍,会包含终点;否则只到最后一个不超过终点的值。我2023年写一个正弦波采样,步长设错了0.01,结果少采了最后一个点,导致频谱分析少了2Hz的峰值。后来改用linspace才解决。

linspace函数  linspace(第一个元素, 最后一个元素, 元素总数)。它保证首尾都包含,并且自动算步长。比如从0到π均匀取6个点:

x = linspace(0, pi, 6)

输出和上面冒号结果一样(浮点精度略有差异)。如果你不写第三个参数,默认生成100个点。什么时候用linspace? 当你明确知道要多少个点,而不是步长时。比如把一条曲线画光滑,用linspace(0, 10, 200)0:0.05:10更直观。

三、结构矩阵与单元矩阵:存储混合数据的好办法

普通矩阵只能存数字,但有时候你要存文本、不同大小的数组。这时就需要结构矩阵和单元矩阵。

结构矩阵:像C语言的结构体。每个元素都有相同的“成员名”,但成员值可以不同。例如存三个人的信息:编号、姓名、成绩矩阵。

a(1).id = 10; a(1).name = 'liu'; a(1).scores = [11,21;34,78];
a(2).id = 12; a(2).name = 'wang'; a(2).scores = [34,191;27,578];
a(3).id = 14; a(3).name = 'cai'; a(3).scores = [13,890;67,231];

调用时用a(2).name就能拿到'wang'。2025年做学生成绩管理系统,我用结构矩阵存了200个学生的10门课成绩,然后写个循环算平均分,代码比用cell数组清爽多了。

单元矩阵:用大括号{}括起来,每个单元可以放任意类型、任意大小的数据。

b = {0, 'liu', [11,21;34,78]; 12, 'wang', [34,191;27,578]; 14, 'cai', [13,890;67,231]}

输出是一个3×3的cell数组。访问时用b{2,3}得到那个2×2的矩阵。注意:小括号b(2,3)返回的是cell单元本身,大括号b{2,3}返回的是里面存的内容。这区别新手经常搞混——我见过一个同事用b(2,3)直接做乘法,报错“未定义运算符”,改成b{2,3}*2就好了。

四、矩阵元素引用的4个必会技巧(下标、序号、冒号、end)

取矩阵里的某个或某些元素,是日常操作。下面四个技巧一个比一个实用。

技巧1:下标引用  最直白:A(3,2)就是第3行第2列。如果你给一个不存在的下标赋值,MATLAB会自动把矩阵扩展到那个大小,缺失的位置填0。看例子:

A = [1,2,3; 4,5,6];
A(4,5) = 10

结果A变成4行5列,原来3列后面补两列0,第4行前4列也是0,只有(4,5)位置是10。这特性有时是惊喜,有时是灾难——你本来想改第2行第5列,结果手误写成A(5,2)=10,矩阵瞬间多了3行,数据全乱了。所以赋值前最好用size(A)确认一下。

技巧2:序号引用  MATLAB是按列存储的——先存第一列所有行,再存第二列……所以A(3)取的是第3个元素。对于2×3矩阵A:

A = [1,2,3; 4,5,6];
A(3)   % 输出2,因为按列排顺序是 [1;4;2;5;3;6]

序号与下标的转换公式:序号 = (列号-1)*行数 + 行号。反过来用sub2indind2sub函数转换。比如你要把第2行第3列的下标转成序号:

A = [1,2,3; 4,5,6];
ind = sub2ind(size(A), 2, 3)   % 输出6
[row, col] = ind2sub(size(A), 6)  % row=2, col=3

实际工作中我很少手动算序号,但做矩阵遍历时用序号比双层循环快一点。

技巧3:冒号表达式取子矩阵  这是最常用的。记住几个模式:

  • A(i,:) 第i行的全部列
  • A(:,j) 第j列的全部行
  • A(i:i+m, k:k+n) 从第i行到i+m行,第k列到k+n列的子块
  • A(i:i+m, :) 第i到i+m行的所有列

举例:

A = [1,2,3,4,5; 6,7,8,9,10; 11,12,13,14,15];
A(1:2, :)     % 取前两行全部
A(2:3, 1:2:5) % 取2~3行,第1、3、5列(步长为2)

输出:

ans = [6,8,10; 11,13,15]

技巧4:end运算符  end表示最后一行的行号或最后一列的列号。比如取最后一行:

A = [1,2,3,4,5; 6,7,8,9,10; 11,12,13,14,15; 16,17,18,19,20];
A(end, :)   % 第4行全部
A([1,4], 3:end)  % 第1行和第4行,从第3列到最后一列

输出:

ans = [3,4,5; 18,19,20]

你甚至可以用end-1表示倒数第二行。写循环时特别方便。

五、矩阵变形与删除:reshape和空矩阵实战

删除矩阵元素  给要删除的位置赋空矩阵[]。比如删除第2列和第4列:

A = [1,2,3,4,5; 6,7,8,9,10; 11,12,13,14,15; 16,17,18,19,20];
A(:, [2,4]) = []

结果剩下第1、3、5列。注意:删除多列时,要同时删除,不能一个一个删——因为删完一列后矩阵列数变了,原来的第4列已经变成第3列了。

reshape改变形状  reshape(A, m, n)把A变成m行n列的矩阵,但元素个数必须相同(m*n = numel(A))。它是按列顺序填充的。看例子:

A = [1,2,3,4,5; 6,7,8,9,10; 11,12,13,14,15; 16,17,18,19,20];  % 4行5列,共20个元素y = reshape(A, 5, 4)   % 变成5行4列

输出y(按列读取原矩阵A的列顺序):

y =     1     7    13    19     6    12    18     5    11    17     4    10    16     3     9    15     2     8    14    20

你发现规律了吗?原A的第1列[1;6;11;16]变成了y的第1列;原A的第2列[2;7;12;17]变成了y的第2列的前4个,第5个元素2?等等,不对——实际上是按列读取A的整个列向量[1;6;11;16;2;7;12;17;3;8;13;18;4;9;14;19;5;10;15;20],然后按列填充到5×4矩阵里。这容易晕,但你可以记住:reshape不会改变数据在内存中的排列顺序

拉直成一列  A(:) 把矩阵按列堆叠成一个列向量。等价于reshape(A, numel(A), 1)

A = [1,2,3,4,5; 6,7,8,9,10];B = A(:)

B得到10×1列向量:[1;6;2;7;3;8;4;9;5;10]。这招在需要把矩阵转成向量输入某些函数时特别有用。2026年MATLAB的很多机器学习函数要求输入是列向量,你用A(:)一步搞定。

实战综合案例:假设你有一个5×5的灰度图像矩阵(值0-255),你要提取中间3×3的子块,把它拉成一列,然后存到另一个矩阵的第3列。

img = randi([0,255], 5,5);   % 随机生成5×5灰度图sub = img(2:4, 2:4);         % 提取2~4行,2~4列,得到3×3col_vec = sub(:);             % 拉成9×1列向量result = zeros(9, 5);        % 预分配9行5列的存储空间result(:, 3) = col_vec;       % 放到第3列

这段代码在2025年一个实时图像处理项目里跑过,处理速度比用循环快20倍。

说了这么多,其实MATLAB矩阵的核心操作就这些。你打开MATLAB,把上面每个例子敲一遍,遇到不懂的用help命令——比如help reshape。别死记,动手才是硬道理。2026年的MATLAB已经集成AI辅助,你敲代码时它会自动补全,但基础不牢,补全都不知道选哪个。今天就练到这儿,有问题欢迎留言。

武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空