📅  最后修改于: 2020-11-03 09:49:08             🧑  作者: Mango
MATLAB中所有数据类型的所有变量都是多维数组。向量是一维数组,矩阵是二维数组。
我们已经讨论了向量和矩阵。在本章中,我们将讨论多维数组。但是,在此之前,让我们讨论一些特殊类型的数组。
在本节中,我们将讨论一些创建特殊数组的函数。对于所有这些功能,一个参数创建一个正方形数组,双参数创建一个矩形数组。
zeros()函数创建一个全零的数组-
例如-
zeros(5)
MATLAB将执行上述语句并返回以下结果-
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()函数创建一个全为一个的数组-
例如-
ones(4,3)
MATLAB将执行上述语句并返回以下结果-
ans =
1 1 1
1 1 1
1 1 1
1 1 1
eye()函数创建一个单位矩阵。
例如-
eye(4)
MATLAB将执行上述语句并返回以下结果-
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
rand()函数在(0,1)上创建一个均匀分布的随机数数组-
例如-
rand(3, 5)
MATLAB将执行上述语句并返回以下结果-
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)
MATLAB将执行上述语句并返回以下结果-
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]
MATLAB将执行上述语句并返回以下结果-
a =
7 9 5
6 1 9
4 3 2
数组a是3 x 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
我们还可以使用ones(),zeros()或rand()函数创建多维数组。
例如,
b = rand(4,3,2)
MATLAB将执行上述语句并返回以下结果-
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()函数来构建多维数组。它沿着指定的维度连接一个数组列表-
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提供以下功能来对数组内容进行排序,旋转,置换,整形或移位。
Function | Purpose |
---|---|
length | Length of vector or largest array dimension |
ndims | Number of array dimensions |
numel | Number of array elements |
size | Array dimensions |
iscolumn | Determines whether input is column vector |
isempty | Determines whether array is empty |
ismatrix | Determines whether input is matrix |
isrow | Determines whether input is row vector |
isscalar | Determines whether input is scalar |
isvector | Determines whether input is vector |
blkdiag | Constructs block diagonal matrix from input arguments |
circshift | Shifts array circularly |
ctranspose | Complex conjugate transpose |
diag | Diagonal matrices and diagonals of matrix |
flipdim | Flips array along specified dimension |
fliplr | Flips matrix from left to right |
flipud | Flips matrix up to down |
ipermute | Inverses permute dimensions of N-D array |
permute | Rearranges dimensions of N-D array |
repmat | Replicates and tile array |
reshape | Reshapes array |
rot90 | Rotates matrix 90 degrees |
shiftdim | Shifts dimensions |
issorted | Determines whether set elements are in sorted order |
sort | Sorts array elements in ascending or descending order |
sortrows | Sorts rows in ascending order |
squeeze | Removes singleton dimensions |
transpose | Transpose |
vectorize | Vectorizes expression |
以下示例说明了上述某些功能。
元素的长度,尺寸和数量-
创建一个脚本文件并在其中键入以下代码-
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是以下其中之一-
创建一个脚本文件并在其中键入以下代码-
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)
MATLAB将执行上述语句并返回以下结果-
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}
MATLAB将执行上述语句并返回以下结果-
ans = Blue
ans = Green
ans = Yellow