主要内容

matlab.tall.movi​​ngwindow.

将移动窗口函数应用于数据块

描述

例子

助教= matlab.tall.movi​​ngWindow(FCN.窗户tX适用该功能FCN.当窗口移动到。的第一个维度时,每个窗口一次tX.输出助教应用的结果是垂直连接的吗FCN.每个窗口。

例子

[助教结核病,...] = matlab.tall.movi​​ngwindow(FCN.窗户tX,......), 在哪里FCN.是返回多个输出的函数句柄,返回数组助教,结核病,…,每个对应于其中一个输出参数FCN..输入到FCN.数据窗口是否来自于参数TX,TY,....此语法具有以下要求:

  • FCN.必须返回与请求的相同数量的输出matlab.tall.movi​​ngwindow.

  • 每个输出的FCN.必须与第一个数据输入的类型相同tX

  • 所有输出助教,结核病,…必须具有相同的高度。

[___) = matlab.tall.movingWindow (___名称,价值使用前面的任何语法使用一个或多个名称-值对参数指定附加选项。例如,要调整窗口之间的步长,可以指定'走吧'和一个标量。或者改变终点的处理,其中没有足够的元素完成窗口,可以指定'终点'和一个有效的选项('收缩''丢弃',或数字填充值)。

例子

全部收缩

使用matlab.tall.movi​​ngwindow.计算航空公司抵达和离境延误的移动中位数。

创建一个数据存储区Airlinesmall.csv.数据集并将其转换为高阵列。数据包含有关美国航班的抵达和出发时间的信息。提取arrdelay.DEPDELAY变量,这是航班延误的矢量,创建一个包含延误作为独立列的高数组。

varnames = {'arrdelay''depdelay'};ds = tabulartextdataStore('airlinesmall.csv''尾声''na'......'selectedvariamblenames',varnames);tt =高(DS);tx = [tt.arrdelay tt.depdelay]
tX = Mx2高双矩阵8 12 8 1 21 20 13 12 4 -1 59 63 3 -2 11 -1::::

使用matlab.tall.movi​​ngwindow.计算第一个维度中数据的移动中位数。使用5000个窗口大小。

fcn = @(x)中位数(x,1,“omitnan”);ta = matlab.tall.movi​​ngWindow(FCN,5000,TX)
ta = mxnx ...高级双数组???......???......???... :::::::::

将结果的惟一行收集到内存中。

tA =收集(独特的助教,'行')))
使用本地MATLAB会话评估高表达: - 通过1的第1条:完成的1.1秒 - 通行证2:1分1分2秒评估完成1分3分3秒
ta =31×2-4.0000 -2.0000 -3.5000 -2.0000 -3.0000 -2.0000 -3.0000 -1.5000 -3.0000 -1.0000 -3.0000 -0.5000 -3.0000 0 -2.5000 -1.0000 -2.5000 0 -2.0000 -1.0000⋮

使用matlab.tall.movi​​ngwindow.将多个输出的函数应用于数据的Windows。

从内存中的随机矩阵创建一个高阵列。

x =兰特(1000,5);tx = tall(x)
TX = 1,000x5高大双矩阵0.8147 0.6312 0.7449 0.3796 0.4271 0.9058 0.3551 0.8923 0.3191 0.9554 0.1270 0.9970 0.2426 0.9861 0.7242 0.9134 0.2242 0.1296 0.7182 0.5809 0.6324 0.6525 0.2251 0.4132 0.5403 0.0975 0.6050 0.3500 0.0986 0.7054 0.2785 0.3872 0.2871 0.7346 0.0050 0.5469 0.1422 0.9275 0.6373 0.7825::::: :::::::::

创建一个函数,用于查找第一个维度中每个数据窗口的总和、平均值、中值和模式。每个输出在第一个维度中需要具有相同的大小,但其他维度可以具有不同的大小。对于每个数据窗口,求和计算生成一个标量,而其他计算生成1-经过-Nvectors。

将函数保存在本地工作区中。

函数[s,mn,mdn,md] = mystats(x)s = sum(x,[2 1]);mn =平均值(x,1);mdn =中位数(x,1);md = mode(x,1);结尾

注意:此函数包含在示例的末尾作为本地功能。

使用matlab.tall.movi​​ngwindow.申请mystats函数与窗口大小为250的数据。指定四个输出参数以返回所有输出mystats.使用'终点'名称值对丢弃不完整的窗口。

[tS, tmn, tmdn, tmd] = matlab.tall。tX movingWindow (@mystats, 250年,'终点''丢弃'
tS = MxNx……高双数组???......???......??? ... : : : : : : tmn = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : tmdn = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : : tmd = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
函数[s,mn,mdn,md] = mystats(x)s = sum(x,[2 1]);mn =平均值(x,1);mdn =中位数(x,1);md = mode(x,1);结尾

输入参数

全部收缩

要应用的窗口函数,指定为函数句柄或匿名函数。每个输出的FCN.必须与第一个输入相同tX.你可以使用'opportslike'选项返回不同数据类型的输出。

一般功能签名FCN.

[a,b,c,...] = fcn(x,y,z,...)
FCN.必须满足以下要求:

  1. 输入参数- 输入[x, y, z,…]是适合内存的数据块。通过从各个高阵列输入中提取数据来产生块[TX,TY,TZ,......].投入[x, y, z,…]满足这些属性:

    • 所有的输入[x, y, z,…]在第一维度中具有相同的尺寸。

    • 数据块[x, y, z,…]来自高大维度的同一索引,假设高大的阵列是高层尺寸的不明显。例如,如果tX是高大维度的非星期顿,然后第一组块可能是x = tx(1:20000,:)y =泰(1:20000:)

    • 当任意一个的第一维[TX,TY,TZ,......]尺寸1,对应的块[x, y, z,…]由那个高阵列中的所有数据组成。

    • 应用FCN.必须导致将输入数据的减少到标量或一系列高度1的切片。

      当输入是一个矩阵、N-D数组、表或时间表时,应用FCN.必须导致在每个列或变量中的每个列或变量中减少输入数据。

  2. 输出参数——输出[A,B,C,......]块是否适合内存,要发送到各自的输出[ta,tb,tc,...].输出[A,B,C,......]满足这些属性:

    • 所有输出[A,B,C,......]必须在第一维中具有相同的尺寸。

    • 所有输出[A,B,C,......]与先前调用的相应结果垂直连接FCN.

    • 所有输出[A,B,C,......]发送到各自目标输出数组的第一个维度中的相同索引。

  3. 功能规则-FCN.必须满足功能规则:

    • F ([inputs1;inputs2]) = = (F (inputs1);F (inputs2)):将功能应用于输入的串联应与单独将函数应用于输入,然后连接结果。

例如,这个函数计算窗口中元素的平均值和标准偏差,并返回两个输出数组:

功能[mv,sd] = movstats(tx)mv =均值(tx,1,'omitnan');sd = std(tx,1,'omitnan);结尾
将此功能保存到可访问文件夹后,您可以使用此命令调用窗口大小的函数:
[ta,tb] = matlab.tall.movi​​ngwindow(@ movstats,5,tx)

例子:ta = matlab.tall.movi​​ngwindow(@(x)std(x,1,'omitnan'),tx)指定一个匿名函数来计算每个窗口的标准偏差,忽略年代。

例子:tA = matlab.tall.movingWindow (@mean 3 tX)指定函数句柄@意思计算每个三元素窗口的平均值。

数据类型:function_handle.

窗口大小,指定为正整数标量或双元素行向量(NB NF)

  • 如果窗户为标量,则:

    • 当窗口大小为奇怪的,每个窗口以数据中的相应元素为中心。

    • 当窗口大小为甚至,每个窗口都以当前和以前的元素为中心。

  • 如果窗户是矢量(NB NF),然后窗口包括前一个元素、当前元素和下一个元素NF输入的元素。

默认情况下,当没有足够的元素填充窗口时,窗口大小会在端点处自动截断。当窗口以这种方式被截断时,该函数只对填充窗口的元素进行操作。您可以使用终点名称值对。

数据类型:单身的|双倍的|int8|int16|INT32.|INT64.|uint8.|uint16|UINT32|uint64

输入数组,指定为标量、向量、矩阵、多维数组、表或时间表的单独参数。输入数组可以是高数组,也可以是内存中的数组。输入数组用作转换函数的输入FCN..每个输入数组TX,TY,...必须具有相同的高度。

名称值对参数

指定可选的逗号分离对名称,价值论点。姓名是参数名称和价值为对应值。姓名必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:ta = matlab.tall.movi​​ngwindow(@myfcn,window,tx,'stride',2)

Windows之间的步骤大小,指定为逗号分隔的配对组成'走吧'一个正整数标量。后FCN.操作一个窗口的数据,计算向前推进'走吧'值,然后在下一个窗口上操作。增加…的价值'走吧'从默认值1的默认值是通过挑出每个其他元素或每三个元素等来减少输出的大小。

默认情况下,值'走吧'1,因此每个窗口都以输入中的每个元素为中心。例如,这是一个移动的和计算,窗口大小为3,在向量上运行[1 2 3 4 5 6]'

如果是值'走吧'2然后,计算更改,以便每个窗口以输入(1,3,5)中的每个第二元素为中心。移动的总和现在返回三个部分和而不是六个:

数据类型:单身的|双倍的|int8|int16|INT32.|INT64.|uint8.|uint16|UINT32|uint64

处理领先和尾随窗口的方法,指定为逗号分隔对组成'终点'和表中的一个值。

在窗口计算的开头和结束时,正在操作的元素窗口不完整。这'终点'选项指定如何处理这些不完整的窗口。

'终点'价值 描述 示例:移动总和

'收缩'

缩小输入端点附近的窗口大小,仅包括现有元素。

'丢弃'

不要输出窗口与现有元素完全重叠的任何结果。

数字或逻辑填充值

用指定的数字或逻辑值替换不存在的元素。

  • 填充值的类型必须与tX

  • 第一维度中的填充值的大小必须等于1,而其他尺寸的尺寸必须匹配tX

数据类型:单身的|双倍的|int8|int16|INT32.|INT64.|uint8.|uint16|UINT32|uint64|逻辑|char|细绳

输出数组的原型,指定为逗号分隔对,由'opportslike'和包含原型阵列的单元阵列。当您指定时'opportslike',输出阵列助教,结核病,…返回的matlab.tall.movi​​ngwindow.具有与指定的原型阵列相同的数据类型和属性{pa,pb,...}.您必须指定'opportslike'当输出数组的数据类型与输入数组的数据类型不同时。如果您指定'opportslike',则必须为每个输出指定一个原型数组。

例子:ta = matlab.tall.movi​​ngWindow(...,TX,'OutputsLike',{Int8(1)});, 在哪里tX是双精度高数组,返回助教作为int8代替双倍的

数据类型:细胞

输出参数

全部收缩

输出数组,以标量、向量、矩阵或多维数组的形式返回。如果有任何输入matlab.tall.movi​​ngwindow.为高,则所有输出参数也是高的。否则,所有输出参数都是内存数组。

  • 输出阵列的大小和数据类型取决于指定的窗口函数FCN.

  • 输出阵列助教,结核病,…都具有相同的高度,这取决于值'走吧''终点'.默认情况下,输出阵列与输入阵列相同。

  • 一般来说,输出助教,结核病,…必须完全具有与第一个输入相同的数据类型tX.但是,您可以指定'opportslike'返回不同的数据类型。在输入数组中TX,TY,...是空的,或者何时'终点''丢弃'并且没有足够的元素来填充一个全尺寸的窗口,matlab.tall.movi​​ngwindow.返回空输出。空输出的尺寸基于输入数组的大小tX,或根据提供的原型阵列的大小'opportslike',如果指定的话。

提示

  • 使用matlab.tall.movi​​ngwindow.用于简单的滑动窗口计算。matlab.tall.blockMovingWindow是一种高级API,旨在为在高数组上执行滑动窗口计算提供更大的灵活性。因此,它的使用更加复杂,因为函数必须准确地处理包含许多完整窗口的数据块。但是,通过适当的向量化计算,可以减少必要的函数调用次数并提高性能。

在R2019A介绍