MATLAB中所有数据类型的所有变量都是多维数组。向量是一维数组,矩阵是二维数组。
我们前面已经讨论和学习过向量和矩阵。 在本章中,将讨论和学习多维数组。 然而,在此之前,让我们先学习一些特殊类型的数组。
MATLAB中的特殊数组
在本节中,我们将讨论学习一些创建一些特殊数组的函数。对于这些函数,单个参数创建一个正方形数组,双参数创建矩形数组。
zeros()函数是用来创建一个全零的数组 -
例如 -zeros(5)
MATLAB
执行上面示例代码,得到以下结果 -Trial>> zeros(5)
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
Shell
ones()函数创建一个所有元素为1的数组 -
例如 -ones(4,3)
MATLAB
执行上面示例代码,得到以下结果 -Trial>> ones(4,3)
ans =
1 1 1
1 1 1
1 1 1
1 1 1
Shell
eye()函数创建一个单位矩阵。
例如 -eye(4)
MATLAB
执行上面示例代码,得到以下结果 -Trial>> eye(4)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Shell
rand()函数在(0,1) - 上创建均匀分布的随机数的数组 -
例如 -rand(3, 5)
MATLAB
执行上面示例代码,得到以下结果 -Trial>> 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
Shell
魔方
魔方是一个平方,它产生相同的和,它的元素被逐行,逐列或者对角线地添加时。
magic()函数创建一个魔术方阵。这需要一个参数,指定正方形的大小。 参数必须是大于或等于3的标量。magic(4)
MATLAB
执行上面示例代码,得到以下结果 -Trial>> magic(4)
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Shell
多维数组
具有二维以上的数组在MATLAB中被称为多维数组。MATLAB中的多维数组是正常二维矩阵的扩展。
通常要生成一个多维数组,首先创建一个二维数组然后再扩展它。
例如,让我们创建一个二维数组a。a = [7 9 5; 6 1 9; 4 3 2]
MATLAB
执行上面示例代码,得到以下结果 -Trial>> a = [7 9 5; 6 1 9; 4 3 2]
a =
7 9 5
6 1 9
4 3 2
Shell
数组a是3×3数组; 可以通过提供以下值来添加第三维: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
Shell
还可以使用ones(),zeros()或rand()函数来创建多维数组。
例如,b = rand(4,3,2)
MATLAB
执行上面示例代码,得到以下结果 -Trial>> b = rand(4,3,2)
b(:,:,1) =
0.1419 0.9595 0.9340
0.4218 0.6557 0.6787
0.9157 0.0357 0.7577
0.7922 0.8491 0.7431
b(:,:,2) =
0.3922 0.0318 0.8235
0.6555 0.2769 0.6948
0.1712 0.0462 0.3171
0.7060 0.0971 0.9502
Shell
也可以使用cat()函数来构建多维数组。它沿着指定的维度连接数组列表 -
cat()函数的语法是 -B = cat(dim, A1, A2...)
MATLAB
其中,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])
MATLAB
执行上面示例代码,得到以下结果 -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
Shell
数组函数
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) % length of x vector
y = rand(3, 4, 5, 2);
ndims(y) % no of dimensions in array y
s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab'];
numel(s) % no of elements in s
MATLAB
运行文件时,显示以下结果 -ans = 8
ans = 4
ans = 23
Shell
数组元素的循环移位
创建脚本文件并在其中键入以下代码 -a = [1 2 3; 4 5 6; 7 8 9] % the original array a
b = circshift(a,1) % circular shift first dimension values down by 1.
c = circshift(a,[1 -1]) % circular shift first dimension values % down by 1
% and second dimension values to the left % by 1.
MATLAB
运行文件文件时,显示以下结果 -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
Shell
排序数组
创建脚本文件并在其中键入以下代码 -v = [ 23 45 12 9 5 0 19 17] % horizontal vector
sort(v) % sorting v
m = [2 6 4; 5 3 9; 2 0 1] % two dimensional array
sort(m, 1) % sorting m along the row
sort(m, 2) % sorting m along the column
MATLAB
运行文件文件时,显示以下结果 -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
Shell
单元阵列
单元格阵列是索引单元的数组,其中每个单元格可以存储不同维度和数据类型的数组。
单元格函数用于创建单元格数组。单元格函数的语法是 -C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)
MATLAB
其中,C是单元阵列;
dim是一个整数或整数向量,它指定单元格数组C的维数;
dim1,...,dimN是指定C大小的标量整数;
obj是以下之一:Java数组或对象
类型为System.String或System.Object的.NET数组
示例
创建脚本文件并在其中键入以下代码 -c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}
MATLAB
运行文件时,得到以下结果 -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
}
Shell
访问单元格数组数据
有两种方法来引用单元格数组的元素 -将第一个括号()中的索引包围,以引用单元格集
将大括号{}中的索引括起来,以引用单个单元格内的数据
当将索引包围在第一个括号中时,它指的是这组单元格。
括号中的单元格数组索引是指单元格集。
例如:c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2)
MATLAB
运行文件时,得到以下结果 -ans =
{
[1,1] = Red
[2,1] = 1
[1,2] = Blue
[2,2] = 2
}
Shell
还可以通过用花括号索引来访问单元格的内容。
例如 -c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c{1, 2:4}
MATLAB
运行文件时,得到以下结果 -ans = Blue
ans = Green
ans = Yellow
Shell