D2_1matlab数组基本操作

一、创建数组

1.直接赋值法

% 创建行向量
row_vector = [1, 2, 3, 4, 5];

% 创建列向量
column_vector = [1; 2; 3; 4; 5];

% 创建二维数组
matrix = [1, 2, 3; 4, 5, 6; 7, 8, 9];

% 创建一个 2*2*2 的三维数组
highD_array = [[1, 2; 3, 4],[5, 6; 7, 8]];

%创建一个 2*2*2 的三维数组
suzu(2,2,2)=0

2.冒号运算符(等差数列行向量)

% 创建从1到10的整数数组
array1 = 1:10;

% 创建从1到10,步长为2的数组
array2 = 1:2:10;

当使用 start:end 这种形式时,会创建一个从 start 开始,以步长为 1 递增,直到不超过 end 的等差数列行向量。

使用 start:step:end 形式时,会创建一个从 start 开始,以 step 为步长递增(或递减,当 step 为负数时),直到不超过 end 的等差数列行向量。

如果按照 step 递增(或递减)无法正好达到 end 值,向量会取不超过 end 的最接近的值。

3.创建全零、全一、单位、对角、随机、魔术矩阵

% 创建维度为3*4*5全零矩阵
zero_matrix = zeros(3,4,5);

% 创建维度为2*2全一矩阵
ones_matrix = ones(2,2);

% 创建单位矩阵
identity_matrix = eye(3);

% 创建对角矩阵
diagonal_vector = [1, 2, 3, 4];
diagonal_matrix = diag(diagonal_vector);

% 创建随机矩阵,元素值在 0 到 1 之间
random_matrix = rand(4,4,4);

% 创建魔术矩阵
magic_matrix = magic(5);

特别解释一下随机矩阵和魔术矩阵

随机矩阵是指矩阵中的元素是随机生成的矩阵。在 MATLAB 里,常用 rand 函数来生成随机矩阵,其背后的原理基于均匀分布随机数生成算法。简单来说,均匀分布意味着在指定的区间内,每个数值被选中的概率是相等的。当使用 rand 函数时,它会按照均匀分布的规则,在 (0, 1) 这个区间内为矩阵的每个元素随机选取一个值。

魔术矩阵(Magic Square)是一种特殊的方阵,也就是行数和列数相等的矩阵。它具有独特的性质:矩阵的每一行、每一列以及两条对角线上的元素之和都相等,这个相等的和被称为魔术常数。对于一个 n 阶魔术矩阵(n 表示矩阵的行数或列数),其魔术常数可以通过公式n(n*n+1)/2计算得出。通过magic(n)生成的矩阵具有重复性。

二、数组索引

1.线性索引

线性索引是按照数组元素在内存中的存储顺序进行编号,从 1 开始。对于二维数组,元素按列优先存储

% 创建一个 2x3 的数组
A = [1, 2, 3; 4, 5, 6];
% 使用线性索引访问元素
element1 = A(3);

在上述例子中,二维数组 A 按列优先存储,元素依次为 1, 4, 2, 5, 3, 6,所以 A(3) 访问的是 2

2.下标索引

下标索引使用下标来访问数组元素

% 创建一个 2x3 的数组
A = [1, 2, 3; 4, 5, 6];
% 使用下标索引访问元素
element2 = A(2, 3); % 访问第 2 行第 3 列的元素

这里 A(2, 3) 访问的是数组 A 中第 2 行第 3 列的元素 6

3.逻辑索引

逻辑索引使用一个与原数组大小相同的逻辑数组来选择元素,逻辑数组中的 true 表示选择对应位置的元素,false 表示不选择

% 创建一个 2x3 的数组
A = [1, 2, 3; 4, 5, 6];
% 创建一个逻辑数组
logical_index = [true, false, true; false, true, false];
% 使用逻辑索引访问元素
selected_elements = A(logical_index);

上述代码中,逻辑数组 logical_index 决定了哪些元素会被选择,最终选择的元素为 1, 3, 5

4.范围索引

可以使用冒号运算符指定行或列的范围来选择数组的一部分。

% 创建一个 3x3 的数组
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
% 选择所有行,第 2 到 3 列的元素
sub_array = A(:, 2:3);

这里 A(:, 2:3) 选择了数组 A 中第 1 到 2 行,第 2 到 3 列的元素,形成一个新的子数组。

三、数组切片

语法为A(范围1,范围2,......(根据具体维度来确定))

% 创建一个三维数组
threeD_array = rand(2, 3, 2);

% 选取第 1 个“切片”(第一维为 1),第 2 到第 3 行,第 1 到第 2 列的元素
slice6 = threeD_array(1, 2:3, 1:2);

四、数组的修改

1.通过索引

通过索引能够精准定位数组中的元素,进而对其进行修改。索引既可以针对单个元素,也可以针对一个范围的元素

% 创建一个 3x3 的数组
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];

% 修改单个元素,将第 2 行第 3 列的元素改为 20
A(2, 3) = 20;

% 修改一个范围的元素,把第 1 行第 1 列到第 2 列的元素都改为 50
A(1, 1:2) = 50;

2.通过逻辑

借助逻辑索引,可依据特定条件来修改数组中的元素。逻辑索引是一个与原数组大小相同的逻辑数组,其中 true 表示对应位置的元素会被修改,false 则表示不修改。

% 创建一个 3x3 的数组
B = [10, 20, 30; 40, 50, 60; 70, 80, 90];

% 将数组中大于 50 的元素都改为 0
B(B > 50) = 0;

3.删除元素

在 MATLAB 中,使用空矩阵 [] 能够删除数组中的元素。对于二维数组,可以删除行或列;对于一维数组,可以删除特定位置的元素。

% 一维数组删除元素
oneD_array = [1, 2, 3, 4, 5];
% 删除第 3 个元素
oneD_array(3) = [];


% 二维数组删除列
twoD_array = [1, 2, 3; 4, 5, 6; 7, 8, 9];
% 删除第 2 列
twoD_array(:, 2) = [];


五、数组的合并

1. 水平合并

水平合并是将多个数组在水平方向(列方向)上拼接在一起,要求参与合并的数组行数必须相同。可以使用方括号 [] 或者 horzcat 函数来实现。

% 创建两个示例数组
A = [1, 2; 3, 4];
B = [5, 6; 7, 8];

% 使用方括号进行水平合并
C1 = [A, B];

% 使用 horzcat 函数进行水平合并
C2 = horzcat(A, B);

2. 垂直合并

垂直合并是将多个数组在垂直方向(行方向)上拼接在一起,要求参与合并的数组列数必须相同。可以使用方括号 [] 或者 vertcat 函数来实现。

% 创建两个示例数组
D = [1, 2, 3];
E = [4, 5, 6];

% 使用方括号进行垂直合并
F1 = [D; E];


% 使用 vertcat 函数进行垂直合并
F2 = vertcat(D, E);

3. 高维数组沿指定维度合并

对于高维数组,可以使用 cat 函数沿指定的维度进行合并。cat 函数的第一个参数指定合并的维度,后面依次跟上要合并的数组。

% 创建两个三维示例数组
G = rand(2, 2, 2);
H = rand(2, 2, 2);

% 沿第三维进行合并
I = cat(3, G, H);

你可能感兴趣的:(算法,matlab,学习)