Matlab数组求和函数sum的使用教程

文章目录(展开/隐藏→)

展开
4
(2)

今天,给大家带来Matlabsum函数的使用教程,sum函数可以对一维数组求和,也可以对二维数组矩阵中的任意一行或任意一列求和,还可以对三维数组的任意一个维度生成的矩阵求和。最近,我讲的几篇,都可以在实际Matlab编程以及数据处理中用到。

本文主要讲解sum函数的常见用法、语法说明、向量元素的总和、矩阵列总和、矩阵行总和、数组切片总和、三维数组的总和、32 位整数之和、总和,不包括 NaN等用法。

Matlab数组求和函数sum的使用教程

下面,首先给出Matlab中关于sum函数的帮助文档如下:

>> help sum
 sum Sum of elements.
    S = sum(X) is the sum of the elements of the vector X. If X is a matrix,
    S is a row vector with the sum over each column. For N-D arrays, 
    sum(X) operates along the first non-singleton dimension.
 
    S = sum(X,DIM) sums along the dimension DIM. 
 
    S = sum(..., TYPE) specifies the type in which the 
    sum is performed, and the type of S. Available options are:
 
    'double'    -  S has class double for any input X
    'native'    -  S has the same class as X
    'default'   -  If X is floating point, that is double or single,
                   S has the same class as X. If X is not floating point, 
                   S has class double.
 
    S = sum(..., MISSING) specifies how NaN (Not-A-Number) values are 
    treated. The default is 'includenan':
 
    'includenan' - the sum of a vector containing NaN values is also NaN.
    'omitnan'    - the sum of a vector containing NaN values
                   is the sum of all its non-NaN elements. If all 
                   elements are NaN, the result is 0.
 
    Examples:
    If   X = [0 1 2; 3 4 5]
    then sum(X, 1) is [3 5 7] and sum(X, 2) is [3; 12]
 
    If X = int8(1:20) then sum(X) accumulates in double and the
    result is double(210) while sum(X,'native') accumulates in
    int8, but overflows and saturates to int8(127).

常见用法

S = sum(A)
S = sum(A,'all')
S = sum(A,dim)
S = sum(A,vecdim)
S = sum(___,outtype)
S = sum(___,nanflag)

语法说明

S = sum(A)返回A沿大小不等于1的第一个数组维度的元素之和。

如果A是向量,则sum(A)返回元素之和。

如果A是矩阵,则sum(A)将返回包含每列总和的行向量。

如果A是多维数组,则sum(A)沿大小不等于1的第一个数组维度计算,并将这些元素视为向量。此维度会变为1,而所有其他维度的大小保持不变。

S = sum(A,'all')计算A的所有元素的总和。此语法适用于MATLAB® R2018b及更高版本。

S = sum(A,dim)沿维度dim返回总和。例如,如果A为矩阵,则sum(A,2)是包含每一行总和的列向量。

S = sum(A,vecdim)根据向量vecdim中指定的维度对A的元素求和。例如,如果A是矩阵,则sum(A,[1 2])A中所有元素的总和,因为矩阵的每个元素包含在由维度12定义的数组切片中。

S = sum(_,outtype)使用上述语法中的任何输入参数返回指定数据类型的总和。outtype可以是 defaultdoublenative

S = sum(_,nanflag)指定在上述任意语法的计算中包括还是忽略NaN值。sum(A,'includenan')会在计算中包括所有NaN值,而sum(A,'omitnan')则忽略这些值。

向量元素的总和

创建一个向量并计算各个元素的总和。

A = 1:10;
S = sum(A)

输出结果为:

S = 55

矩阵列总和

创建一个矩阵并计算每列中元素的总和。

A = [1 3 2; 4 2 5; 6 1 4]

得到如下矩阵:

A = 3×3
     1     3     2
     4     2     5
     6     1     4
S = sum(A)

事实上,我们也可以使用sum(A,1)来按列求和,上面的写法省略了1。如果把1改成2,就是按行求和,下面有给出例子。

求和结果如下:

S = 1×3
    11     6    11

矩阵行总和

创建一个矩阵并计算每行中元素的总和。

A = [1 3 2; 4 2 5; 6 1 4]

得到如下矩阵:

A = 3×3
     1     3     2
     4     2     5
     6     1     4

用如下表达式求每一行的和

S = sum(A,2)

得到如下结果:

S = 3×1
     6
    11
    11

关于Matlab使用sum函数求和,我之前写过一篇解决问题的文章,有所提到,可以参考下,更加深层次的了解sum函数的使用方法:《Matlab cell元胞数据读取方法实例讲解》。

数组切片总和

使用向量维度参数来操作数组的特定切片。这里,需要注意的是,Matlab需要2018以上,才支持这种切片求和方法。

创建所有元素为1的三维数组。

A = ones(4,3,2);

要对A的每个页面中的所有元素求和,请使用向量维度参数指定要求和的维度(行和列)。由于两个页面均为4×3矩阵,因此每页的总和为12

S1 = sum(A,[1 2])

以上写法表示将矩阵的第一个维度和第二个维度生成的矩阵进行分别求和,因此会得到两个求和结果:

S1 = 
S1(:,:,1) =
    12
S1(:,:,2) =
    12
Matlab数组求和函数sum的使用教程

如果沿第一个维度对A进行切片,则可以对得到的4个页面的元素求和,每个页面为3×2矩阵。

S2 = sum(A,[2 3])

以上写法表示将矩阵的第二个维度和第三个维度生成的矩阵进行分别求和,因此会得到四个求和结果:这是因为第一个维度上有4个数字,即三维矩阵是4*3*2的。

S2 = 4×1
     6
     6
     6
     6

沿第二个维度切片,每个页面总和超过4×2矩阵。

S3 = sum(A,[1 3])

以上写法表示将矩阵的第一个维度和第三个维度生成的矩阵进行分别求和,因此会得到三个求和结果:

S3 = 1×3
     8     8     8

R2018b开始,要对数组的所有维度求和,可以在向量维度参数中指定每个维度,或使用all选项。

S4 = sum(A,[1 2 3])
S4 = 24
Sall = sum(A,'all')
Sall = 24

以上表示,可以用all,代替表示所有维度,不过需要Matlab R2018b版本以上才可以。

前文中,出现了切片求和中一些2016版本尚不支持的写法,下面给出更加合适的写法:

sum(sum(A,1),3)
sum(sum(A,1),2)
sum(sum(A,2),3)

得到如下结果:

ans(:,:,1) =
    12
ans(:,:,2) =
    12
ans =
     6
     6
     6
     6
ans =
     8     8     8

这种,就涉及到了sum函数的嵌套,或许你需要仔细思考下才可以理解其中的道理。但这种写法得到的结果跟前面的切片求和部分,对三维数组的各个维度求和的结果是一致的。

Matlab数组求和函数sum的使用教程

如果你还是不理解,可以再看看下面拆开的写法运算结果:

>> sum(A,1)
ans(:,:,1) =
     4     4     4
ans(:,:,2) =
     4     4     4
>> sum(A,2)
ans(:,:,1) =
     3
     3
     3
     3
ans(:,:,2) =
     3
     3
     3
     3
>> sum(A,3)
ans =
     2     2     2
     2     2     2
     2     2     2
     2     2     2

以上后半部分所要到的A,都是在切片求和部分生成的三维全1矩阵。

共计2人评分,平均4

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/program/matlab-function-sum.html

(1)
上一篇 2021年04月08日 22:14
下一篇 2021年04月10日 18:39

相关推荐

  • Matlab水平条形图创建函数barh教程

    文章目录(展开/隐藏→) 展开常见用法语法说明显示一个条形序列显示具有轴标签和图例的四个条形序列更改基准值显示具有负数据的堆叠条形自定义垂直轴刻度标签指定分类数据在条形末端添加标签…

    2020年11月29日
    040
  • Matlab单对数刻度函数semilogx&y

    文章目录(展开/隐藏→) 展开x 轴的对数刻度y 轴的对数刻度 4 (2) 今天,给各位系统的介绍下 Matlab 中使用 semilogx及semilogy 以对数为单轴刻度绘图…

    2020年10月26日
    057
  • Matlab快速入门之编程和脚本

    文章目录(展开/隐藏→) 展开脚本实时脚本循环及条件语句脚本位置 4.3 (3) 我们知道Matlab内置了大量函数,方便数据处理,函数作图等。当我们遇到一些问题需要解决,而Mat…

    2022年09月10日
    049
  • Matlab平面伪彩图绘制函数pcolor用法

    文章目录(展开/隐藏→) 展开常见用法语法说明用四种颜色绘制四个面对 Hadamard 矩阵绘图修改边框跨面进行颜色插值指定半对数网格指定参数化网格指定目标坐标区 3.8 (5) …

    2021年02月08日
    0582
  • Matlab三维法线箭头图绘制函数quiver3

    文章目录(展开/隐藏→) 展开常见用法语法说明创建三维箭头图绘制曲面图法线 4.5 (4) 今天,开始讲解关于Matlab中绘制三维箭头速度矢量图的方法。Matlab提供了一个qu…

    2021年01月26日
    0214
  • Matlab热图创建函数heatmap详细教程

    文章目录(展开/隐藏→) 展开常见用法语法说明注意:基于表格数据创建热图重新排列热图标签为热图颜色指定表变量指定颜色数据的计算方法基于矩阵数据创建热图使用自定义轴标签基于矩阵数据创…

    2020年11月17日
    0232

发表回复

登录后才能评论
本站APP