MATLAB 语言基础知识 矩阵和数组 创建、串联和扩展矩阵

2022-10-22 09:17:39

最基本的MATLAB数据结构体是矩阵。矩阵是按行和列排列的数据元素的二维矩形数组。元素可以是数字、逻辑值(true 或 false)、日期和时间、字符串或者其他MATLAB数据类型。

即使一个数字也能以矩阵的形式存储。例如,包含值 100 的变量存储为 double 类型的 1×1 矩阵。

A=100;
whos A
  Name      Size            Bytes  Class     Attributes

  A1x18double

构建数据矩阵
如果您有一组具体的数据,可以使用方括号将这些元素排列成矩阵。一行数据的元素之间用空格或逗号分隔,行与行之间用分号分隔。例如,创建只有一行的矩阵,其中包含四个数字元素。得到的矩阵大小为 1×4,因为它有一行和四列。这种形状的矩阵通常称为行向量。

A=[126293-8]
A=1×4
126293-8
sz=size(A)
sz=1×2
14

现在再用这些数字创建一个矩阵,但排成两行。此矩阵有两行和两列。

A=[1262;93-8]
A=2×2
126293-8
sz=size(A)
sz=1×2
22

专用矩阵函数
MATLAB 中有许多函数可以帮助您创建具有特定值或特定结构的矩阵。例如,zeros 和 ones 函数可以创建元素全部为零或全部为一的矩阵。这些函数的第一个和第二个参数分别是矩阵的行数和列数。

A=zeros(3,2)
A=3×2
000000
B=ones(2,4)
B=2×4
11111111

diag 函数将输入元素放在矩阵的对角线上。例如,创建一个行向量 A,其中包含四个元素。然后创建一个 4×4 矩阵,其对角元素是 A 的元素。

A=[126293-8];
B=diag(A)
B=4×4
120000620000930000-8

串联矩阵
您还可以使用方括号将现有矩阵连接在一起。这种创建矩阵的方法称为串联。例如,将两个行向量串联起来,形成一个更长的行向量。

A=ones(1,4);
B=zeros(1,4);
C=[A B]
C=1×8
11110000

要将 A 和 B 排列为一个矩阵的两行,请使用分号。

D=[A;B]
D=2×4
11110000

要串联两个矩阵,它们的大小必须兼容。也就是说,水平串联矩阵时,它们的行数必须相同。垂直串联矩阵时,它们的列数必须相同。例如,水平串联两个各自包含两行的矩阵。

A=ones(2,3)
A=2×3
111111
B=zeros(2,2)
B=2×2
0000
C=[A B]
C=2×5
1110011100

串联矩阵的另一种方法是使用串联函数,如 horzcat,它可以水平串联两个兼容的输入矩阵。

D=horzcat(A,B)
D=2×5
1110011100

生成数值序列
colon 是创建元素连续且均匀分布的矩阵的便捷方式。例如,创建一个行向量,其元素是从 1 到 10 的整数。

A=1:10
A=1×10
12345678910

可以使用冒号运算符创建在任何范围内以 1 为增量的数字序列。

A=-2.5:2.5
A=1×6
-2.5000-1.5000-0.50000.50001.50002.5000

要更改序列的增量值,请在范围起始值和结束值之间指定增量值,以冒号分隔。

A=0:2:10
A=1×6
0246810

要递减,请使用负数。

A=6:-1:0
A=1×7
6543210

还可以按非整数值递增。如果增量值不能均分指定的范围,MATLAB 会在超出范围之前在可以达到的最后一个值处自动结束序列。

A=1:0.2:2.1
A=1×6
1.00001.20001.40001.60001.80002.0000

扩展矩阵
通过将一个或多个元素置于现有行和列索引边界之外,可以将它们添加到矩阵中。MATLAB 会自动用 0 填充矩阵,使其保持为矩形。例如,创建一个 2×3 矩阵,然后在 (3,4) 的位置插入一个元素,使矩阵增加一行一列。

A=[102030;607080]
A=2×3
102030607080
A(3,4)=1 
A=3×4
102030060708000001

还可以通过在现有索引范围之外插入新矩阵来扩展其大小。

A(4:5,5:6)=[23;45]
A=5×6
102030000607080000000100000023000045

要重复扩展矩阵的大小,例如在 for 循环中,通常最好要为预计创建的最大矩阵预分配空间。如果没有预分配空间,MATLAB 必须在每次大小增加时分配内存,因此会降低操作速度。例如,通过将矩阵的元素初始化为零,预分配一个最多容纳 10000 行和 10000 列的矩阵。

A=zeros(10000,10000);

如果之后还要预分配更多元素,可以通过在矩阵索引范围之外指定元素或将另一个预分配的矩阵与 A 串联来进行扩展。

空数组
MATLAB 中的空数组是指至少有一个维度的长度等于零的数组。空数组可用于以编程方式表示“无”的概念。例如,假设要查找一个向量中小于 0 的所有元素但没有找到。find 函数将返回一个空的索引向量,表示未找到任何小于 0 的元素。

A=[1234];
ind=find(A<0)
ind=1x0 emptydouble row vector

许多算法都包含可以返回空数组的函数调用。在这些算法中,允许将空数组作为函数参数传递,而不是作为特殊情况处理,这样通常是有帮助的。如果确实需要自定义空数组的处理方式,可以使用 isempty 函数检查它们。

TF=isempty(ind)
TF= logical1
  • 作者:结冰架构
  • 原文链接:https://blog.csdn.net/u013883025/article/details/117521774
    更新时间:2022-10-22 09:17:39