Main Content

movprod

移动乘积

说明

示例

M = movprod(A,k) 返回由局部 k 个数据点的乘积组成的数组,其中每个乘积均基于 A 的相邻元素的长度为 k 的滑动窗计算得出。MA 的大小相同。

k 为奇数时,窗以当前位置的元素为中心。当 k 为偶数时,窗以当前元素及其前一个元素为中心。当没有足够的元素填满窗时,窗将自动在端点处截断。当窗口被截断时,只根据窗口内的元素计算乘积。

  • 如果 A 是向量,movprod 将沿向量 A 的长度运算。

  • 如果 A 是多维数组,则 movprod 沿 A 的大小不等于 1 的第一个维度进行运算。

示例

M = movprod(A,[kb kf]) 通过长度为 kb+kf+1 的窗口计算乘积,其中包括当前位置的元素、前面的 kb 个元素和后面的 kf 个元素。

示例

M = movprod(___,dim) 为上述任一语法指定 A 的运算维度。例如,如果 A 是矩阵,则 movprod(A,k,2) 沿 A 的列进行运算,计算每行的 k 个元素的移动乘积。

示例

M = movprod(___,nanflag) 指定包含还是省略 A 中的 NaN 值。例如,movprod(A,k,"omitnan") 在计算每个乘积时会忽略 NaN 值。默认情况下,movprod 包括 NaN 值。

示例

M = movprod(___,Name,Value) 使用一个或多个名称-值对组参数指定移动乘积的其他参数。例如,如果 x 是时间值向量,则 movprod(A,k,"SamplePoints",x) 相对于 x 中的时间计算移动乘积。

示例

全部折叠

计算行向量的三点中心移动乘积。当端点处的窗口中少于三个元素时,将根据可用元素计算乘积。

A = [1 2 4 -1 -2 -3 -1 3 2 1];
M = movprod(A,3)
M = 1×10

     2     8    -8     8    -6    -6     9    -6     6     2

计算行向量的三点尾部移动乘积。当端点处的窗口中少于三个元素时,将根据可用元素计算乘积。

A = [1 2 1 -1 -2 -3 -1 3 4 1];
M = movprod(A,[2 0])
M = 1×10

     1     2     2    -2     2    -6    -6     9   -12    12

计算矩阵中每行的三点中心移动乘积。维度参数为 2,即跨 A 的列移动窗口。窗从第一行开始,沿水平方向移动到该行的末尾,然后移到第二行,依此类推。

A = [1 2 1; -1 -2 -3; -1 3 4]
A = 3×3

     1     2     1
    -1    -2    -3
    -1     3     4

M = movprod(A,3,2)
M = 3×3

     2     2     2
     2    -6     6
    -3   -12    12

创建一个包含 NaN 值的行向量。

A = [4 8 NaN -1 -2 -3 NaN 3 4 5];

计算向量的三点中心移动乘积,不包括 NaN 值。对于包含任一 NaN 值的窗,movprod 使用非 NaN 元素进行计算。

M = movprod(A,3,"omitnan")
M = 1×10

    32    32    -8     2    -6     6    -9    12    60    20

根据时间向量 t,计算 A 中数据的 3 小时中心移动乘积。

A = [4 8 6 -1 -2 -3];
k = hours(3);
t = datetime(2016,1,1,0,0,0) + hours(0:5)
t = 1x6 datetime
   01-Jan-2016 00:00:00   01-Jan-2016 01:00:00   01-Jan-2016 02:00:00   01-Jan-2016 03:00:00   01-Jan-2016 04:00:00   01-Jan-2016 05:00:00

M = movprod(A,k,"SamplePoints",t)
M = 1×6

    32   192   -48    12    -6     6

计算行向量的三点中心移动乘积,但在输出中舍弃使用的点数少于三个的计算。也就是说,只返回从满的三元素窗口计算的乘积,而舍弃端点计算。

A = [1 2 1 -1 -2 -3 -1 3 4 1];
M = movprod(A,3,"Endpoints","discard")
M = 1×8

     2    -2     2    -6    -6     9   -12    12

输入参数

全部折叠

输入数组,指定为向量、矩阵或多维数组。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

窗长度,指定为数值或持续时间标量。当 k 是正整数标量时,中心乘积包括当前位置的元素以及周围的相邻元素。

例如,movprod(A,3) 计算一个由局部三点乘积组成的数组。

movprod(A,3) computation. The elements in the sample window are 1, 3, and 2, so the resulting local product is 6.

定向窗长度,指定为包含两个元素的数值或持续时间行向量。当 kbkf 为正整数标量时,将基于 kb+kf+1 个元素进行计算。该计算包括当前位置的元素、当前位置前面的 kb 个元素以及当前位置后面的 kf 个元素。

例如,movprod(A,[2 1]) 计算一个由局部四点乘积组成的数组。

movprod(A,[2 1]) computation. The elements in the sample window are 4, 1, 3, and 2, so the resulting local product is 24.

沿其运算的维度,指定为正整数标量。如果不指定维度,则默认为第一个大于 1 的数组维度。

以一个 m×n 输入矩阵 A 为例:

  • movprod(A,k,1)A 的每列计算包含 k 个元素的移动乘积,并返回一个 m×n 矩阵。

    movprod(A,k,1) column-wise operation

  • movprod(A,k,2)A 的每行计算包含 k 个元素的移动乘积,并返回一个 m×n 矩阵。

    movprod(A,k,2) row-wise operation

缺失值条件,指定为下列值之一:

  • "includemissing""includenan" - 在计算每个乘积时包括 A 中的 NaN 值。如果窗中的任一元素是 NaN,则 M 中的对应元素是 NaN"includemissing""includenan" 具有相同的行为。

  • "omitmissing""omitnan" - 忽略 A 中的 NaN 值,并基于较少的点计算每个乘积。如果窗中的所有元素都是 NaN,则 M 中的对应元素是 1。"omitmissing""omitnan" 具有相同的行为。

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: M = movprod(A,k,"Endpoints","fill")

窗口接近端点时的处理方法,指定为以下选项之一:

描述
"shrink"在窗接近输入端点时缩小窗口的大小,从而只包括现有元素。
"discard"当窗不与现有元素完全重叠时,不输出任何乘积值。
"fill"将不存在的元素替换为 NaN 值。
数值或逻辑标量将不存在的元素替换为指定的数值或逻辑值。

用于计算乘积的样本点,指定为向量。样本点表示数据在 A 中的位置。样本点不需要均匀采样。默认情况下,样本点向量为 [1 2 3 ... ]

移动窗相对于样本点定义,样本点必须已排序并且包含唯一的元素。例如,如果 t 是与输入数据对应的时间向量,则 movprod(rand(1,10),3,"SamplePoints",t) 将有一个代表 t(i)-1.5t(i)+1.5 之间时间间隔的窗。

当样本点向量的数据类型为 datetimeduration 时,移动窗长度的类型必须为 duration

如果样本点的间距不均匀并且指定了 Endpoints,则其值必须为 "shrink"

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2017a 中推出

全部展开

另请参阅

函数