主要内容

matlab.tall.blockMovingWindow

应用移动窗口函数和块减少填充块的数据

描述

例子

助教= matlab.tall.blockMovingWindow (windowfcnblockfcn窗口tX适用于blockfcn完成Windows的数据和windowfcn到不完整的窗口的数据附近的边缘。窗口指定滑动窗口的大小。结果包含了应用的纵向串联blockfcn而且windowfcn这些窗口的数据。

例子

助教结核病,……] = matlab.tall.blockMovingWindow(windowfcnblockfcn窗口tX,……),在那里windowfcn而且blockfcn函数句柄返回多个输出,返回数组吗tA, tB,…的输出参数之一windowfcn而且blockfcn.的输入windowfcn而且blockfcn是来自参数的数据吗tX, tY,….该语法有以下要求:

  • windowfcn而且blockfcn必须返回与所请求的相同数量的输出matlab.tall.blockMovingWindow

  • 的每个输出windowfcn而且blockfcn必须与第一个数据输入类型相同tX

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

例子

___] = matlab.tall.blockMovingWindow(___名称,值使用任何前面的语法指定带有一个或多个名称-值对参数的其他选项。例如,要调整窗口之间的步长,可以指定“步”一个标量。或者要更改端点的处理,如果没有足够的元素来完成一个窗口,则可以指定“端点”和一个有效选项(“缩水”“丢弃”,或数值填充值)。

例子

全部折叠

使用matlab.tall.blockMovingWindow计算航班到达和离开延误的移动平均值。

对象的数据存储airlinesmall.csv数据集,并将其转换为高数组。这些数据包含了美国航班到达和起飞时间的信息。提取ArrDelay而且DepDelay变量,它们是航班延误的向量,以创建一个高数组,将延误作为单独的列。

Varnames = {“ArrDelay”“DepDelay”};ds = tabularTextDatastore(“airlinesmall.csv”“TreatAsMissing”“NA”...“SelectedVariableNames”, varnames);Tt =高(ds);tX = [tt;ArrDelaytt.DepDelay]
tX = Mx2高双矩阵8 12 8 1 21 20 13 12 4 -1 59 63 3 -2 11 -1::::

使用matlab.tall.blockMovingWindow计算窗口大小为10的第一维数据的移动平均值。自windowfcn只适用于单个窗口的数据,您可以使用的意思是函数将数据的窗口缩减为一行的矩阵。的blockfcn适用于整个数据块,因此使用movmean函数计算块中每个完整窗口数据的平均值。

Windowfcn = @(info,x) mean(x,1,“omitnan”);Blockfcn = @(info,x) movmean(x,info.)窗口1“omitnan”“端点”“丢弃”);A = matlab.tall。blockMovingWindow(windowfcn, blockfcn, 10, tX)
A = MxNx…高双阵???...???...? ? ? ... : : : : : :

将部分结果收集到内存中。

收集((1:10,:))
使用本地MATLAB会话评估tall表达式:-通过2中的第1步:在1.2秒内完成-通过2中的第2步:在8.4秒内完成评估,在10秒内完成
ans =10×210.8000 8.8000 18.8333 17.8333 16.5714 15.0000 15.8750 13.0000 14.4444 11.8889 13.2000 10.8000 14.0000 11.1000 13.5000 11.9000 15.3000 11.4000 19.7000 13.4000

计算表中变量的移动统计信息。

加载outages.csv数据集作为一个高表。该数据包含有关断电的信息。

T =高(可读的)“outages.csv”))
T = 1468 x6高表地区OutageTime RestorationTime造成损失客户  _____________ ________________ ______ __________ ________________ ___________________ {' 西南的}2002-02-01 12:18 458.98 - 1.8202 e + 06 2002-02-01 16:50{“暴风雪”}{“东南”}2003-01-23 00:49 530.14 - 2.1204 e + 05 NaT{“暴风雪”}{“东南”}2003-02-07)21:15 289.4 - 1.4294 e + 05 2003-02-07 08:14{“暴风雪”}{‘西方’}2004-04-06 05:44 434.81 - 3.4037 e + 05 2004-04-06 06:10{“设备故障”}{“中西部”}2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23{'严重风暴'}{'西部'}2003-06-18 02:49 00 2003-06-18 10:54{'攻击'}{'西部'}2004-06-20 14:39 231.29 NaN 2004-06-20 19:16{'设备故障'}{'西部'}2002-06-06 19:28 311.86 NaN 2002-06-07 00:51{'设备故障'}::::::::::::

使用matlab.tall.blockMovingWindow将移动窗口函数应用到高表的块上。指定这些选项:

  • blkstats作为块函数,对完整的数据块进行操作(在示例的末尾作为局部函数包含)。

  • 窗口大小为50,步幅为5。

  • 端点作为“丢弃”忽略数据的不完整窗口。有了这个值,windowfcn输入可以指定为空[]因为只有完整的窗口的数据被操作。

  • 输入表有六个变量,但两个输出是双精度向量。指定标量加倍作为的值OutputsLike函数允许数据类型和大小的改变。

[A, B] = matlab.tall。blockMovingWindow([], @blkstats, 50, T,“步”5,...“端点”“丢弃”“OutputsLike”, {1,1});

预览结果中的几行。

[A,B] =收集(头(A),头(B))
使用本地MATLAB会话评估tall表达式:-通过2中的第1步:在0.53秒内完成-通过2中的第2步:在0.7秒内完成评估在1.9秒内完成
一个=8×1254.0861 254.0861 340.3499 452.0191 464.8524 471.9737 464.8524 464.8524
B =8×1105× 1.3447 1.0779 1.4227 1.4509 1.2888 1.2888 1.2308 1.3722

blkstats函数的移动中值损失而且客户使用指定的窗口大小在第一个维度中的表变量。函数应用值来减小输出的大小,然后将结果作为两个向量返回。

函数[out1, out2] = blkstats(info, t) a = movmedian([t, t])损失。客户],信息。窗口1“omitnan”“端点”“丢弃”);A = A(1:信息。步:结束,:);Out1 = a(:,1);Out2 = a(:,2);结束

输入参数

全部折叠

函数应用于数据的不完整窗口,指定为函数句柄、匿名函数或[]windowfcn在计算移动到高维度中的数据时,每个不完整窗口调用一次。matlab.tall.blockMovingWindow适用于windowfcn只有当“端点”默认值为“缩水”.如果为指定了不同的值“端点”,然后设置windowfcn[]

的每个输出windowfcn必须与第一个数据输入类型相同tX.您可以使用“OutputsLike”选项返回不同数据类型的输出。

的一般功能签名windowfcn

[a, b, c,…]= windowfcn(info, x, y, ...)
信息Input是由提供的结构matlab.tall.blockMovingWindow其中包括以下字段:

  • —指定窗口之间的步长(默认为1)“步”名称-值对。

  • 窗口—指定窗口大小。属性设置此值窗口输入参数。

windowfcn必须满足这些要求:

  1. 输入参数-输入[x, y, z,…]是适合内存的数据块。这些块是通过从相应的高数组输入中提取数据来生成的[tX, tY, tZ,…].输入[x, y, z,…]满足以下属性:

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

    • 数据块[x, y, z,…]来自高维度中的相同索引,假设高数组在高维度中是非单例的。例如,如果tX而且在高维度是非单块的,那么第一组块可能是x = tX(1:2000,:)而且y = tY(1:2000,:)

    • 当任何一个的第一维度[tX, tY, tZ,…]大小为1,对应的块[x, y, z,…]由高数组中的所有数据组成。

    • 应用windowfcn必须导致将输入数据缩减为高度为1的标量或数组的切片。

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

  2. 输出参数-输出[a, b, c,…]适合内存的块是否被发送到各自的输出[tA, tB, tC,…].输出[a, b, c,…]满足以下属性:

    • 所有的输出[a, b, c,…]必须在第一维度中有相同的大小。

    • 所有的输出[a, b, c,…]是否垂直连接到之前调用的各自结果windowfcn

    • 所有的输出[a, b, c,…]发送到各自目标输出数组中第一个维度中的相同索引。

  3. 功能规则- - - - - -windowfcn必须满足这个函数规则:

    • F ([inputs1;inputs2) == [F(inputs1);F (inputs2)):将函数应用于输入的连接应该与将函数分别应用于输入,然后将结果连接相同。

例子:A = matlab.tall。blockMovingWindow(@windowfcn, @blockfcn, 10, tX)

例子:A = matlab.tall。blockMovingWindow([], @blockfcn, 10, tX, 'EndPoints', 'discard')

数据类型:function_handle

函数应用于数据块,指定为函数句柄或匿名函数。blockfcn应用于包含完整数据窗口的数据块。因此,blockfcn必须以向量化的方式对整个数据块进行操作,并返回与指定的窗口大小和步幅具有适当大小的输出。

的每个输出blockfcn必须与第一个数据输入类型相同tX.您可以使用“OutputsLike”选项返回不同数据类型的输出。

matlab.tall.blockMovingWindow适用于blockfcn当数据块只包含完整的窗口时:

  • 对于中间的块“端点”设置为“缩水”(默认行为)。在这种情况下windowfcn对端数据的不完整窗口进行操作。

  • 对于所有块,当“端点”设置为“丢弃”或者填充值。

的一般功能签名blockfcn

[a, b, c,…]= blockfcn(info, bX, bY, bZ, ...)
信息Input是由提供的结构matlab.tall.blockMovingWindow其中包括以下字段:

  • —指定窗口之间的步长(默认为1)“步”名称-值对。

  • 窗口—指定窗口大小。属性设置此值窗口输入参数。

数据块bX, bY, bZ,…matlab.tall.blockMovingWindow提供给blockfcn具有以下属性:

  • 这些块只包含全尺寸的窗口。blockfcn不必为不完整的数据窗口定义行为。

  • 第一个数据窗口从块的第一个元素开始。最后一个窗口的最后一个元素是块的最后一个元素。

blockfcn必须满足这些要求:

  1. 输入参数-输入[bX, bY, bZ,…]是适合内存的数据块。这些块是通过从相应的高数组输入中提取数据来生成的[tX, tY, tZ,…].输入[bX, bY, bZ,…]满足以下属性:

    • 所有的输入[bX, bY, bZ,…]在任何允许的扩展后,在第一个维度中具有相同的大小。

    • 数据块[bX, bY, bZ,…]来自高维度中的相同索引,假设高数组在高维度中是非单例的。例如,如果tX而且在高维度是非单块的,那么第一组块可能是bX = tX(1:2000,:)而且bY = tY(1:20000,:)

    • 如果是任何数据输入的第一个维度[tX, tY, tZ,…]大小为1,则对应的块[bX, bY, bZ,…]由高数组中的所有数据组成。

    • 应用blockfcn必须导致输入数据的减少,使结果的高度等于块中的窗口数。你可以使用信息。窗口而且信息。步确定块中窗口的数量。

      如果输入是矩阵、N-D数组、表格或时间表,则应用blockfcn必须导致在其每个列或变量中减少输入数据。

  2. 输出参数-输出[a, b, c,…]是块,适合在内存中,被发送到各自的输出[tA, tB, tC,…].输出[a, b, c,…]满足以下属性:

    • 所有的输出[a, b, c,…]必须在第一维度中有相同的大小。

    • 所有的输出[a, b, c,…]是否垂直连接到之前调用的各自结果blockfcn

    • 所有的输出[a, b, c,…]发送到各自目标输出数组中第一个维度中的相同索引。

  3. 功能规则- - - - - -blockfcn必须满足这个函数规则:

    • F ([inputs1;inputs2) == [F(inputs1);F (inputs2)):将函数应用于输入的连接应该与将函数分别应用于输入,然后将结果连接相同。

例子:A = matlab.tall。blockMovingWindow(@windowfcn, @blockfcn, 10, tX)

例子:A = matlab.tall。blockMovingWindow([], @blockfcn, 10, tX, 'EndPoints', 'discard')

数据类型:function_handle

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

  • 如果窗口为标量,则:

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

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

  • 如果窗口是向量(NB NF),则该窗口包含前一个元素,当前元素和下一个元素NF输入元素。

默认情况下,当没有足够的元素来填充窗口时,窗口大小在端点处自动截断。当窗口以这种方式被截断时,函数只对填充窗口的元素进行操作。属性可以更改此行为端点名称-值对。

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

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

名称-值对参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:tA = matlab.tall。blockMovingWindow(@windowfcn, blockfcn, window, tX, 'Stride', 2)

窗口之间的步长,由逗号分隔的对组成“步”一个正整数标量。后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|逻辑|字符|字符串

输出数组的原型,指定为逗号分隔的对,由“OutputsLike”以及包含原型数组的单元格数组。当你指定“OutputsLike”,输出数组助教,结核病,…返回的matlab.tall.blockMovingWindow具有与指定的原型数组相同的数据类型和属性{PA、PB,…}.您必须指定“OutputsLike”当输出数组的数据类型与输入数组的数据类型不同时。如果你指定“OutputsLike”,则必须为每个输出指定一个原型数组。

例子:tA = matlab.tall.blockMovingWindow(…, tX, 'OutputsLike', {int8(1)});,在那里tX是双精度高数组,返回助教作为int8而不是

数据类型:细胞

输出参数

全部折叠

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

  • 输出数组的大小和数据类型取决于指定的窗口函数windowfcn而且blockfcn

  • 输出数组助教,结核病,…都有相同的高度,这取决于的值“步”而且“端点”.默认情况下,输出数组与输入数组大小相同。

  • 一般来说,输出助教,结核病,…所有数据类型都必须与第一个数据输入相同吗tX.但是,您可以指定“OutputsLike”返回不同的数据类型。对于输入数组的情况tX, tY,…是空的,还是什么时候“端点”“丢弃”没有足够的元素填满一个全尺寸的窗口,matlab.tall.blockMovingWindow返回空输出。空输出的大小基于输入数组的大小tX,或提供给的原型数组的大小“OutputsLike”,如果指定。

提示

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

在R2019a中引入