sum:求和函数
1、如果A是一个向量,则sum(A)可以计算A中所有元素的和
2、如果A是一个矩阵,则sum(A,dim)可以计算A沿维度 dim 中所有元素的和,dim=1表示沿着行方向,即计算每一列的和。当dim=1时,sum(A,1)可以简写成sum(A)
sum(A,1) % 计算每一列的和,返回行向量
sum(A) % dim=1时可以不写
sum(A,2) % 计算每一行的和,返回列向量
3、计算一个矩阵中所有元素的总和
sum(sum(A)) % 计算每一列的和,返回一个行向量,然后再计算这个行向量的和
sum(A(:))
sum(A,'all')
4、指定如何处理 NaN 值
NaN(Not a Number)指不定值或缺失值
在最后加一个输入参数: 'omitnan', 这样就会忽略NaN
sum(A, 'omitnan') % 忽略NaN值
sum(A, 2, 'omitnan')
prod:求乘积函数
用法与sum相似
v = [2,4,5,1,10]; % 向量
prod(v) % 直接向量中所有元素的乘积
A = randi(10,3,4)
prod(A) % 计算每列的乘积
prod(A,2) % 计算每行的乘积
prod(v, 'omitnan')
cumsum:计算累积和
1、如果A是一个向量,则cumsum(A)可以计算向量A的累积和(累加值)
A = [1 5 3 4 -5 0 8];
cumsum(A)1 6 9 13 8 8 16
2、如果A是一个矩阵,则cumsum(A,dim)可以计算A沿维度 dim 中所有元素的累积和,具体的使用方法和sum函数类似。
计算每一列的累积和
cumsum(A) % 或者写成cumsum(A,1)
计算每一行的累积和
cumsum(A,2)
忽略NaN值计算每一列的累积和
cumsum(A,'omitnan')
diff:计算差分
使用diff(A,n)命令计算向量A的n阶差分,当n等于1时,可以直接写成diff(A).
w = [60 65 66 70 68 72 64 70];
diff(w) % 1阶差分, diff(w,1)diff(w,2) % 2阶差分
diff(w,3) % 3阶差分
diff函数也可以用在矩阵上面:diff(A,n,dim)表示沿矩阵A的维度dim方向上计算差分,当dim=1时
沿着行方向计算,即得到每列的n阶差分;当dim=2时沿着列方向计算,即得到每行的n阶差分。
类似的,dim=1时,diff(A,n,1)也可以简写成diff(A,n).
注:diff函数不支持使用'omitnan'参数来忽略向量或者矩阵中的NaN值。
mean:计算平均值
1、如果A是一个向量,则mean(A)可以计算向量A的平均值
2、如果A是一个矩阵,则mean(A,dim)可以计算A沿维度dim中所有元素的平均值
3、也可以在最后加一个输入参数: 'omitnan', 这样计算时会忽略NaN
median:计算中位数
使用方法和mean函数类似
median(y)
median(A) % 计算每一列的中位数
median(A,'omitnan') % 忽略NaN计算每一列的中位数median(A, 2, 'omitnan') 忽略NaN计算每一行的中位数
median(A(:), 'omitnan') % 整个矩阵的中位数
mode:计算众数
(1)一个返回值
调用方法也和mean函数类似,但是mode函数可以有多个返回值,以计算向量A的众数为例,
直接调用mode(A)会返回A中出现次数最多的值。如果有多个值以相同的次数出现,mode函数将
返回其中最小的值。
如果A是一个矩阵,则mode(A,1)或者mode(A)可以沿着行方向进行计算,得到每一列的众数;
mode(A,2)可以沿着列方向进行计算,得到每一行的众数,这里的1和2表示维度dim。
注意:使用mode函数计算众数时会自动忽略NaN值,我们不能额外添加'omitnan'参数,
否则会报错。
(2)两个返回值
如果A是一个向量,[M,F] = mode(A)得到的
M表示向量A的众数,
F表示众数M在向量A中出现的次数。
A = [-1 2 0 8 -1 0 2 1 8 0 8];
[M, F] =mode(A)M=0,F=3
(3)三个返回值
[M,F,C] = mode(A), 这里的
C是一个元胞数组,元胞数组里面有一个列向量,列向量中的每个元素都是向量A的众数。
注: 元胞数组是使用大括号{ }括起来的,元胞数组(cell array)里面的元素可以包含不同的数据类
型,例如标量、向量、矩阵、字符串等
A = [3 3 1 4;
0 0 1 1;
0 1 6 4;
1 5 6 8];
[M, F, C] = mode(A) % 计算每一列的众数M = 0 0 1 4
F = 2 1 2 2
C = {[0]} {[0;1;3;5]} {[1;6]} {[4]}
可以使用大括号索引提取C中的每个元素
C{1} = 0
C{3} = 1;6
[M, F, C] = mode(A, 2) %计算A矩阵每一行的众数
var:计算方差
1、如果A是一个向量,那么var(A, w)可以计算A的方差
w=0时,表示计算样本方差,
w=1时,表示计算总体方差。
var(A, 0)也可以直接简写为var(A)。
2、如果A是一个矩阵,则var(A, w, dim)可以计算矩阵A沿维度dim上的方差
3、如果数据中存在NaN值,可以在var函数的最后加上'omitnan'参数来忽略NaN.
v = [6 8 10 12 14];
var(v) % 样本方差,等价于var(v,0)
var(v,1) % 总体方差
% 下面看矩阵的例子
A = randi(10,4,5)
var(A) % 每一列的样本方差
% 也可以写成var(A,0)或者var(A,0,1)
var(A,0,2) % 每一行的样本方差
A = [9 7 10 10 NaN;
10 NaN 10 5 10;
2 3 2 9 8;
10 6 10 2 10];
% 矩阵中存在NaN值
var(A, 0, 2) % 计算每一行的样本方差
% 忽略NaN值计算每一行的样本方差
var(A, 0, 2, 'omitnan')
std:计算标准差
存在原因:量纲和原始数据一致
使用std函数计算样本标准差和总体标准差,它和var函数的使用方法完全相同。
v = [6 8 10 12 14];
std(v) % 样本标准差,等价于std(v,0)
std(v,1) % 总体标准差
% 下面看矩阵的例子
A = randi(10,4,5)
std(A) % 每一列的样本标准差
% 也可以写成std(A,0)或者std(A,0,1)
std(A,0,2) % 每一行的样本标准差
A = [9 7 10 10 NaN;
10 NaN 10 5 10;
2 3 2 9 8;
10 6 10 2 10];
% 矩阵中存在NaN值
std(A, 0, 2) % 计算每一行的样本标准差
% 忽略NaN值计算每一行的样本标准差
std(A, 0, 2, 'omitnan')
min:求最小值
1、求两个矩阵对应位置元素的最小值
min(A,B)
其中,矩阵A和矩阵B的大小可以不一样,只要保证矩阵A和矩阵B具有兼容的大小就能够计算
若 B 是一个数,则min(A,B)表示A中的元素和B相比取最小
2、求向量或者矩阵中的最小值
(1)如果A是向量,则min(A)返回A中的最小值。如果A中有复数,则比较的是复数的模长。
(2)如果A是矩阵,则min(A, [ ], 1)沿着A的行方向求每一列的最小值,也可以简写为min(A);
min(A, [ ], 2)沿着A的列方向求每一行的最小值。这里的1和2表示矩阵的维度(dim)。
min(A,[ ],1) % 求每一列的最小值
min(A,[ ],2) % 求每一行的最小值
注:如果不加【】的话,就是将A中每个元素和1或者2比较大小,并返回较小值。
(3)[m, ind] = min(A). 第一个返回值m是我们要求的最小值,ind是最小值在所在维度上的索引。
注:如果最小元素出现多次,则 ind是最小值第一次出现位置的索引
A = [5 6 7 3 5 3 10];
[min_A , ind] = min(A)
A = [ 7 9 2 8
1 5 1 3
6 5 8 2];
[min_A , ind] = min(A,[ ],2) % 求每一行的最小值并返回索引
求出整个矩阵的最小值
min(A(:))
如果向量或者矩阵中存在NaN值,min函数会自动忽略,不需要单独对NaN值进行处理
max:求最大值
max函数和min函数的用法相同,它是用来求最大值的函数
max(A,B)
[max_A, ind] = max(A) 计算向量A的最大值并返回其索引
max(A, [ ], 1) % 求每一列的最大值
max(A, [ ], 2) % 求每一行的最大值
max(A, 2) % 返回每个元素和2相比的较大值
[max_A , ind] = max(A,[ ],2) % 求每一行的最大值并返回索引
[max_A , ind] = max(A) % 求每一列的最大值并返回索引
其他
mink :求前k个最小值
maxk :求前k个最大值
topkrows :返回矩阵按照排序顺序的前若干行
详情查阅D:\111数模\配套的MATLAB代码和资料\第3章配套代码(版本:2024年4月8日)