MATLAB——调用函数对矩阵运算

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日)

  • 59
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值