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 | 上下翻转矩阵 |
ipermute | N-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
评论已关闭,相关问题请到社区本站新建的社区讨论
对给您造成的不便表示抱歉!