Matlab 的 Matlab数组
MATLAB中所有数据类型的所有变量都是多维数组。向量是一维数组,矩阵是二维数组。
我们前面已经讨论和学习过向量和矩阵。 在本章中,将讨论和学习多维数组。 然而,在此之前,让我们先学习一些特殊类型的数组。
MATLAB中的特殊数组
在本节中,我们将讨论学习一些创建一些特殊数组的函数。对于这些函数,单个参数创建一个正方形数组,双参数创建矩形数组。
zeros()函数是用来创建一个全零的数组 -
例如 -
zeros(5)
执行上面示例代码,得到以下结果 -
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
ones()函数创建一个所有元素为1的数组 -
例如 -
ones(4,3)
执行上面示例代码,得到以下结果 -
Trial>> ones(4,3)
ans =
1 1 1
1 1 1
1 1 1
1 1 1
eye()函数创建一个单位矩阵。
例如 -
eye(4)
执行上面示例代码,得到以下结果 -
Trial>> 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)
执行上面示例代码,得到以下结果 -
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
魔方
魔方是一个平方,它产生相同的和,它的元素被逐行,逐列或者对角线地添加时。
magic()函数创建一个魔术方阵。这需要一个参数,指定正方形的大小。 参数必须是大于或等于3的标量。
magic(4)
执行上面示例代码,得到以下结果 -
Trial>> 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]
执行上面示例代码,得到以下结果 -
Trial>> a = [7 9 5; 6 1 9; 4 3 2]
a =
7 9 5
6 1 9
4 3 2
数组a是3×3数组; 可以通过提供以下值来添加第三维:
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]
执行上面示例代码,得到以下结果 -
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)
执行上面示例代码,得到以下结果 -
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
也可以使用cat()函数来构建多维数组。它沿着指定的维度连接数组列表 -
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) % 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
运行文件时,显示以下结果 -
ans = 8
ans = 4
ans = 23
数组元素的循环移位
创建脚本文件并在其中键入以下代码 -
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.
运行文件文件时,显示以下结果 -
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] % 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
运行文件文件时,显示以下结果 -
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
单元阵列
单元格阵列是索引单元的数组,其中每个单元格可以存储不同维度和数据类型的数组。
单元格函数用于创建单元格数组。单元格函数的语法是 -
C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)
其中,
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}
运行文件时,得到以下结果 -
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