MATLAB 数组


什么是数组

MATLAB中所有数据类型的变量都是多维数组。向量是一维数组,矩阵是二维数组。

前面已经讨论了向量和矩阵。在本章中,我们将讨论多维数组。但是,在此之前,先讨论一些特殊类型的数组。

MATLAB中的特殊数组

在本节中,我们将讨论一些创建特殊数组的函数。对于所有这些函数,单个参数创建一个正方形数组,两个参数创建矩形数组。

zero()函数的作用是:创建一个所有元素为0的数组 ,比如:

zeros(5) %定义5×5的元素为0的数组
ans =                          %输出结果
      0     0     0     0     0
      0     0     0     0     0
      0     0     0     0     0
      0     0     0     0     0
      0     0     0     0     0

同理,ones() 函数会创建一个元素为1的数组

ones(4,3)
ans =
      1     1     1
      1     1     1
      1     1     1
      1     1     1

eye() 函数创建一个单位矩阵 :

eye(4)
ans =
      1     0     0     0
      0     1     0     0
      0     0     1     0
      0     0     0     1

rand() 函数:在(0,1)范围内创建一个均匀分布的随机数数组

rand(3, 5)
ans =

    0.8147    0.9134    0.2785    0.9649    0.9572
    0.9058    0.6324    0.5469    0.1576    0.4854
    0.1270    0.0975    0.9575    0.9706    0.8003

幻方

幻方是指当其元素按行、列或对角相加时,产生的和都相等的矩阵。

magic()函数的作用是:创建一个幻方矩阵。其采用一个奇异参数来给出正方形的大小。参数必须是一个大于或等于3的标量。

magic(4)
ans =
   16     2     3    13
   5    11    10     8
   9     7     6    12
   4    14    15     1

多维数组

在MATLAB中,超过两维的数组称为多维数组。MATLAB中的多维数组是正规二维矩阵的扩展。

通常,为了生成多维数组,我们首先创建一个二维数组并对其进行扩展。

例如,我们创建一个二维数组a :

a = [7 9 5; 6 1 9; 4 3 2]
a =
   7     9     5
   6     1     9
   4     3     2

数组a是一个3乘3的数组;我们可以向a添加第三维,通过提供如下值 :

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

MATLAB将执行上述语句并返回以下结果 :

a =

ans(:,:,1) =

   0   0   0
   0   0   0
   0   0   0

ans(:,:,2) =

   1   2   3
   4   5   6
   7   8   9

还可以使用ones()zeros()rand()函数创建多维数组。例如:


b = rand(4,3,2)
%结果:
b(:,:,1) =
   0.0344    0.7952    0.6463
   0.4387    0.1869    0.7094
   0.3816    0.4898    0.7547
   0.7655    0.4456    0.2760

b(:,:,2) =
   0.6797    0.4984    0.2238
   0.6551    0.9597    0.7513
   0.1626    0.3404    0.2551
   0.1190    0.5853    0.5060

此外,还可以使用cat()函数来构建多维数组。它沿着指定的维-连接一列数组

 B = cat(dim, A1, A2...)

其中:

  • B是新创建的数组
  • A1, A2,…是要连接数组
  • dim是连接数组的维度

实例:

创建一个脚本文件,并在其中键入以下代码:

a = [9 8 7; 6 5 4; 3 2 1];
b = [1 2 3; 4 5 6; 7 8 9];
c = cat(3, a, b, [ 2 3 1; 4 7 8; 3 9 0])

结果将是:

c(:,:,1) =
      9     8     7
      6     5     4
      3     2     1
c(:,:,2) =
      1     2     3
      4     5     6
      7     8     9
c(:,:,3) =
      2     3     1
      4     7     8
      3     9     0

数组函数

MATLAB提供了以下函数来对数组内容进行排序、旋转、排列、重塑或移位:

函数作用
length向量长度或最大数组的维数
ndims数组维数
numel数组元素的个数
size数组维数
iscolumn确定输入是否是列向量
isempty确定数组是否为空
ismatrix确定输入是否为矩阵
isrow确定输入是否为行向量
isscalar确定输入是否是标量
isvector确定输入是否为向量
blkdiag从输入参数构造块对角矩阵
circshift转移阵列圆
ctranspose共轭转置
diag对角矩阵和矩阵的对角线
flipdim沿着指定的维度翻转数组
fliplr从左到右翻转矩阵
flipud上下翻转矩阵
ipermuteN-D数组的逆排列维数
permute重新排列N-D数组的维度
repmat复制和平铺数组
reshape重塑了数组
rot90旋转矩阵90度
shiftdim改变维度
issorted确定集合元素是否按排序顺序排列
sort按升序或降序对数组元素进行排序
sortrows按升序对行进行排序
squeeze删除单维度
transpose转置
vectorize矢量化表达

举例

x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9];
length(x)      % 向量x中元素的个数
y = rand(3, 4, 5, 2);
ndims(y)       % 数组y中的维数
s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab'];
numel(s)       % 数组s中的元素个数

结果为:

ans =  8
ans =  4
ans =  23

数组元素的循环移动

a = [1 2 3; 4 5 6; 7 8 9]  % 原始数组a
b = circshift(a,1)         %  将第一维度的值往下循环移动1个单位.
c = circshift(a,[1 -1])    % 将第一维度的值往下循环移动1个单位.
                           % 并将第二维度的值往左循环移动一个单位.

结果:


a =
   1     2     3
   4     5     6
   7     8     9

b =
   7     8     9
   1     2     3
   4     5     6

c =
   8     9     7
   2     3     1
   5     6     4

数组排序


v = [ 23 45 12 9 5 0 19 17]  % 水平向量
sort(v)                      % 对v排序
m = [2 6 4; 5 3 9; 2 0 1]    % 二维数组
sort(m, 1)                   % 沿行对m进行排序
sort(m, 2)                   % 沿行对列进行排序

结果:


v =
   23    45    12     9     5     0    19    17
ans =
   0     5     9    12    17    19    23    45
m =
   2     6     4
   5     3     9
   2     0     1
ans =
   2     0     1
   2     3     4
   5     6     9
ans =
   2     4     6
   3     5     9
   0     1     2

单元格数组

单元格数组是索引单元格的数组,其中每个单元格可以存储不同维度和数据类型的数组。

cell函数用于创建一个cell数组。单元格函数的语法为:


C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)
  • C为单元格数组;
  • dim是指定单元格数组C的维数的标量整数或整数的向量;
  • dim1,……, dimN是指定C的维数的标量整数;
  • obj是以下的-之一
    • Java数组或对象
    • 类型系统的.NET数组。字符串或System.Object

举例:

c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}
%结果:
c = 
{
   [1,1] = Red
   [2,1] =  1
   [1,2] = Blue
   [2,2] =  2
   [1,3] = Green
   [2,3] =  3
   [1,4] = Yellow
   [2,4] =  4
   [1,5] = White
   [2,5] =  5
}

访问单元格数组中的数据

有两种方法引用单元格数组的元素

  • 将索引括在第一个括号()中,以引用单元格集
  • 将索引括在大括号{}中,以引用单个单元格中的数据

当将索引括在第一个括号中时,它指的是单元格集合。
平滑圆括号中的单元格数组索引表示单元格集合。

例如


c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2)
%结果
ans = 
{
   [1,1] = Red
   [2,1] =  1
   [1,2] = Blue
   [2,2] =  2
}

还可以通过使用花括号进行索引来访问单元格的内容:


c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c{1, 2:4}
%结果:
ans = Blue
ans = Green
ans = Yellow



公众号

关注公众号,获取一手资讯

“ MATLAB 数组 ” comments 0

评论/回复

电子邮件地址不会被公开。 必填项已用*标注