Octave 入门教程目录,请点击: https://blog.csdn.net/benzhujie1245com/article/details/83146777
本内容将介绍 Octave 中的数组的创建和操作。
Octave 中所有数据类型的所有变量都是数组。前面介绍的向量是一维数组,矩阵是二维数组。
我们先来学习一下特殊类型的数组。
我们将学习一些创建特殊数组的函数。对于这些函数(除 magic()
外),一个参数创建一个正方形阵列,双参数创建矩形阵列。另外,还可以通过 help
命令了解更多信息。
函数 | 描述 |
---|---|
zeros() | 创建一个全零数组。 |
ones() | 创建一个所有元素为 1 的数组。 |
eye() | 创建一个单位数组。 |
rand() | 在 (0,1) 上创建均匀分布的随机数 |
magic() | 魔方,创建一个魔术方阵(每行、每列和对角线的和都相等)。一个参数,并且是大于或等于 3 的标量。 |
例如:
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
>> zeros(3, 4)
ans =
0 0 0 0
0 0 0 0
0 0 0 0
>> ones(3, 4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
>> eye(3)
ans =
Diagonal Matrix
1 0 0
0 1 0
0 0 1
>> rand(3, 5)
ans =
0.8896180 0.3087815 0.3119780 0.0491327 0.3764484
0.4404895 0.1463536 0.5014016 0.6479841 0.8865985
0.7034544 0.5270160 0.0047581 0.9184260 0.5798495
>> magic(5)
ans =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>>
具有二维以上的数组在 Octave 中被称为多维数组。Octave 中的多维数组是二维矩阵的扩展。
通常要生成一个多维数组,需要先创建一个二维数组然后再扩展它。例如:
>> a = [1,2,3,4; 2,3,4,5; 3,4,5,6]; % 先创建一个 3x4 的数组
>> a(:, :, 2) = [1,1,1,1; 2,2,2,2; 3,3,3,3] % 添加第 3 维信息
a =
ans(:,:,1) =
1 2 3 4
2 3 4 5
3 4 5 6
ans(:,:,2) =
1 1 1 1
2 2 2 2
3 3 3 3
>>
还可以通过 ones()
、zeros()
和 rand()
函数来创建多维数组。例如:
>> rand(4, 3, 2)
ans =
ans(:,:,1) =
0.32597 0.71631 0.98552
0.67531 0.84928 0.79385
0.37400 0.20648 0.36616
0.49812 0.26846 0.53032
ans(:,:,2) =
0.19587 0.74235 0.92824
0.55542 0.18047 0.10010
0.14898 0.89837 0.88884
0.39869 0.93090 0.44189
>>
也可以通过 cat()
函数来创建多维数组。它沿着指定的维度连接数组列表。cat()
的使用语法如下:
b = cat(dim, a1, a2 ...)
其中,各个参数的具体信息如下:
例如:
>> a = zeros(3);
>> b = ones(3);
>> c = rand(3);
>> d = cat(2, a, b, c) % d 是二维数组
d =
0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 0.57484 0.38160 0.04654
0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 0.57259 0.60139 0.29039
0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 0.54603 0.68865 0.45573
>> d = cat(3, a, b, c) % d 是三维数组
d =
ans(:,:,1) =
0 0 0
0 0 0
0 0 0
ans(:,:,2) =
1 1 1
1 1 1
1 1 1
ans(:,:,3) =
0.574837 0.381605 0.046540
0.572595 0.601393 0.290390
0.546034 0.688649 0.455734
>>
在 Octave 中使用 sort
对数组排序,例如:
>> v = [12, 25, 45, 56, 36, 18];
>> sort(v) % 对向量中的所有元素进行排序
ans =
12 18 25 36 45 56
>> m = [2,6,4; 5,3,9; 2,0,1];
>> sort(m, 1) % 对矩阵中元素按行之间进行排序(即对每列的元素进行排序)
ans =
2 0 1
2 3 4
5 6 9
>> sort(m, 2) % 对矩阵中元素按列之间进行排序(即对每行的元素进行排序)
ans =
2 4 6
3 5 9
0 1 2
>>
Octave 提供以下对数组进行操作的函数:
函数 | 描述 |
---|---|
length | 向量的大小或数组的长度 |
ndims | 数组的维数 |
size | 数组的维度 |
numel | 数组的元素数量 |
isempty | 确定数组是否为空 |
isscalar | 确定输入是否为标量 |
isvector | 确定输入是否为向量 |
isrow | 确定输入是否为行向量 |
iscolumn | 确定输入是否为列向量 |
ismatrix | 确定输入是否为矩阵 |
blkdiag | 从输入参数构造块对角矩阵 |
circshift | 循环移位 |
ctranspose | 复共轭转置 |
diag | 矩阵对角矩阵和对角线 |
flipdim | 沿着指定的尺寸翻转数组 |
fliplr | 从左到右翻转矩阵 |
flipud | 向下翻转矩阵 |
ipermute | 反转 N-D 阵列的置换维度 |
permute | 重新排列 N-D 数组的维度 |
repmat | 复制和平铺数组 |
reshape | 重塑数组 |
rot90 | 旋转矩阵 90 度 |
shiftdim | 移动维度 |
issorted | 确定设置元素是否按排序顺序 |
sort | 按升序或降序排列数组元素 |
sortrows | 按升序排列行 |
squeeze | 删除单例维度 |
transpose | 转置 |
vectorize | 向量化表达式 |
后续使用时再更新具体内容
参考:
[1] https://www.w3cschool.cn/matlab/
[2] http://m.yiibai.com/matlab/