MATLAB中所有数据类型的所有变量都是多维数组。向量是一维数组,矩阵是二维数组。
我们前面已经讨论和学习过向量和矩阵。 在本章中,将讨论和学习多维数组。 然而,在此之前,让我们先学习一些特殊类型的数组。
在本节中,我们将讨论学习一些创建一些特殊数组的函数。对于这些函数,单个参数创建一个正方形数组,双参数创建矩形数组。
zeros()
函数是用来创建一个全零的数组 -
例如 -
zeros(5)
执行上面示例代码,得到以下结果 -
Trial>> zeros(5) ans = 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
eye()
函数创建一个单位矩阵。
例如 -
eye(4)
执行上面示例代码,得到以下结果 -
Trial>> eye(4) ans = 0 0 0 0 1 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 = 3 13 10 8 6 12 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 = 5 9 2
数组a
是3×3
数组; 可以通过提供以下值来添加第三维:
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]
执行上面示例代码,得到以下结果 -
a = ans(:,:,1) = 0 0 0 ans(:,:,2) = 3 6 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) = 7 4 1 c(:,:,2) = 3 6 9 c(:,:,3) = 1 8 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 = 3 6 9 b = 9 3 6 c = 7 1 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 = 12 9 5 0 19 17 ans = 9 12 17 19 23 45 m = 4 9 1 ans = 1 4 9 ans = 6 9 2
单元格阵列是索引单元的数组,其中每个单元格可以存储不同维度和数据类型的数组。
单元格函数用于创建单元格数组。单元格函数的语法是 -
C = cell(dim) C = cell(dim1,...,dimN) D = cell(obj)
其中,
C
是单元阵列;dim
是一个整数或整数向量,它指定单元格数组C
的维数;dim1,...,dimN
是指定C
大小的标量整数;obj
是以下之一: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