Matlab数组
在MATLAB中所有的数据变量是多维数组、向量是一个一维阵列、矩阵是一个二维数组
先看看一些特殊的数值
MATLAB中的特殊阵列
Matlab中使用一些函数来建立一些特殊的阵列,对于这些所有的函数,一个参数创建一个正方形阵列,双参数创建矩形阵列
eg:
zeros() 函数创建一个元素为零的数组
eye(5)
rand() 建立一个数组,值为(0,1)上均匀分布的随机数
MATLAB幻方
产生相同的总和,当它的元素加入逐行,逐列或对角线幻方是一个正方形。
使用 magic() 函数创建一个幻方阵列,它需要一个单数的参数,该参数必须是一个大于或等于3的标量。
MATLAB多维数组
在Matlab中,一个阵列如果具有两个以上的维度则被称为多维数组
在Matlab中的多维数组是正常的两维矩阵的延伸
Matlab中需要先创建一个二维数组然后对该二维数组进行拓展,这样才能生成一个多维数组
eg:
先创建一个二维数组a
a = [5 1 3;5 2 3;5 3 3]
数组a是一个3x3阵列,通过提供的值,可以添加一个第三维(相当于增加了个z轴)
a(:,:,2)=[1 2 3;4 5 6;7 8 9]
同样,也可以使用ones()、zeros()、rand()函数建立多维数组
b = rand(4,3,2)
还可以使用cat()函数来创建多维数组,它结合沿着指定维度的数组列表:
B = cat(dim,A1,A2...)
% B是新建的数组、A1、A2...是要连接的阵列、dim是一起串联阵列的维度
eg:
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数组函数
MATLAB提供以下功能进行排序、旋转、置乱、重塑或移动数组的内容
函数 | 目的 |
---|---|
length | 矢量长度或最大阵列尺寸 |
ndims | 数组维数 |
numel | 数组元素的数目 |
size | 数组维度 |
iscolumn | 确定输入是否是列向量 |
isempty | 确定数组是否为空 |
ismatrix | 确定输入是否为矩阵 |
isrow | 确定输入是否为行向量 |
isscalar | 确定输入是否为标量 |
isvector | 确定输入是否为矢量 |
blkdiag | 从输入参数构造块对角矩阵 |
circshift | 循环移位 |
ctranspose | 复数共轭转置 |
diag | 矩阵的对角矩阵和对角线 |
flipdim | 沿指定维度翻转数组 |
fliplr | 从左到右翻转矩阵 |
flipud | 将矩阵向下翻转 |
ipermute | n-维阵列的反置换维数 |
permute | 重新排列 N 维数组的维数 |
repmat | 复制和平铺数组 |
reshape | 重塑数组 |
rot90 | 旋转矩阵90度 |
shiftdim | 移位维度 |
issorted | 确定集合元素是否按排序顺序排列 |
sort | 按升序或降序对数组元素进行排序 |
sortrows | 按升序对行排序 |
squeeze | 删除单维度 |
transpose | 转置 |
vectorize | 矢量化表达式 |
需用需查、不用硬记
eg:
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,元素(字符?)的数量
循环移位数组元素
a = [1 2 3; 4 5 6; 7 8 9]
b = circshift(a,1) % 将a向下移动一行(看效果猜的)
c = circshift(a,[1 -1]) % 对比下面俩张效果图,[a,b]中,a是行、b是列、正数一个方向、负数 %另一个方向移动
MATLAB数组排序
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) % m数组按行排序
MATLAB单元阵列
单元阵列的阵列中每个单元格可以存储不同的维度和数据类型的数组的索引单元格。
单元格函数用于建立一个单元阵列。
单元格函数的语法如下:
C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)
注意
C 是单元阵列;
dim 是一个标量整数或整数向量,指定单元格阵列C的尺寸;
dim1, ... , dimN 是标量整数指定尺寸的C;
obj 是以下内容之一
Java 数组或对象
.NET阵列 System.String 类型或 System.Object
MATLAB在单元格上阵列访问数据
使用两种方法来引用单元阵列的元素:
- 封闭的索引在第一个 bracket (),是指一组单元格
- 封闭的在大括号{},的索引单个单元格内的数据
括在第一支架的索引,它指的是单元格的集。
单元阵列索引平稳括号单元格集合。
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2) %1:2 第一行切片、1:2第二行切片
同样可以用花括号“{ }”索引访问单元格的内容
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c{1, 2:4} %既可以单个指定、也可以切片
上面的效果图中,有个疑问:索引的开始值怎么算的?例如octave33中的[1,1]=Red,octave35中的[1,1]=Green,octave37中的1=Blue
tip:切片切片