文档

matlab.tall.reduce

减少减少算法应用到数组的数据块

描述

例子

助教= matlab.tall.reduce (fcn,reducefcn,tX)应用函数fcn对每一个的数组tX生成部分结果。然后函数应用reducefcn垂直连接的部分结果反复,直到有一个最终的结果,助教

例子

助教= matlab.tall.reduce (fcn,reducefcn,tX,,……)指定多个数组tX,泰,…输入的fcn。每个数组相同的行手术fcn;例如,fcn (tX (n: m),泰(n: m,:))。高度的输入传递到每个调用之一fcn。这个语法,fcn必须返回一个输出,然后呢reducefcn必须接受一个输入和一个输出返回。

例子

(助教,结核病,……)= matlab.tall.reduce (fcn,reducefcn,tX,,……),在那里fcnreducefcn返回数组,函数返回多个输出吗助教,结核病,…,每一个对应的一个输出参数fcnreducefcn。这个语法有这些要求:

  • fcn必须返回相同数量的输出和要求matlab.tall.reduce

  • reducefcn必须有相同数量的输入和输出,输出的数量要求matlab.tall.reduce

  • 每个输出的fcnreducefcn必须是相同的类型作为第一个输入tX

  • 相应的输出fcnreducefcn必须有相同的高度。

例子

(助教,结核病,……)= matlab.tall.reduce (___、“OutputsLike”{巴勒斯坦权力机构,PB,……})指定输出助教,结核病,…有相同的数据类型作为原型数组PA、PB,……,分别。您可以使用任何输入参数的组合在以前的语法。

例子

全部折叠

创建一个高表,从表中提取一个高大的向量,然后找到向量中的元素的总数。

创建一个高表airlinesmall.csv数据集,数据包含的信息到达和离开的时间我们的航班。提取ArrDelay变量,这是一个向量的延迟到来。

ds = tabularTextDatastore (“airlinesmall.csv”,“TreatAsMissing”,“NA”);ds。SelectedVariableNames = {“ArrDelay”“DepDelay”};tt =高(ds);tX = tt.ArrDelay;

使用matlab.tall.reduce数非的总数元素高的向量。第一个函数元素个数计算每个数据块元素的数量,和第二个函数总和加在一起所有的计数为每个块产生一个标量结果。

s = matlab.tall.reduce (@numel @sum tX)
s = MxNx……高的双重数组?吗?吗?…吗?吗?吗?…吗? ? ? ... : : : : : :

收集结果到内存中。

s =收集(s)
评估高表达式使用当地的MATLAB会话:通过1 1:在1.3秒完成评估在1.4秒完成
s = 123523

创建一个高表,提取两个高大的向量形式,然后计算每个向量的平均值。

创建一个高表airlinesmall.csv数据集,数据包含的信息到达和离开的时间我们的航班。提取ArrDelayDepDelay变量向量的抵达和起飞延误。

ds = tabularTextDatastore (“airlinesmall.csv”,“TreatAsMissing”,“NA”);ds。SelectedVariableNames = {“ArrDelay”“DepDelay”};tt =高(ds);tt = rmmissing (tt);tX = tt.ArrDelay;泰= tt.DepDelay;

在第一阶段的算法,计算出总和和元素计数为每个数据块的向量。要做到这一点,你可以编写一个函数,它接受两个输入和返回一个输出之和与计数为每个输入。这个函数是列为本地函数的例子。

函数泰bx = sumcount (tx) bx = [(tx)和元素个数(tx)和(ty)元素个数(ty)];结束

在减速阶段的算法,需要添加所有的中间金额和数量。因此,matlab.tall.reduce返回元素的总金额和数量的元素为每个输入向量,然后计算的意思是一个简单的部门。这一步可以应用总和函数的第一个维度1-by-4向量从第一阶段的输出。

reducefcn = @ (x)和(x, 1);s = matlab.tall.reduce (@sumcount reducefcn tX,泰)
s = MxNx……高的双重数组?吗?吗?…吗?吗?吗?…吗? ? ? ... : : : : : :
s =收集(s)
评估高表达式使用当地的MATLAB会话:通过1 1:在1.4秒完成评估在1.6秒完成
s =1×4860584 120866 982764 120866

前两个元素年代和计数之和吗tX,第二个两个元素之和与计数。把金额和计算收益率的平均值,可以返回的答案进行比较的意思是函数。

my_mean = [s(1) /秒(2)(3)/ s (4))
my_mean =1×27.1201 - 8.1310
m =收集(平均((tX泰)))
评估高表达式使用当地的MATLAB会话:通过1 1:在0.43秒完成评估在0.52秒完成
m =1×27.1201 - 8.1310

本地函数

这里列出的是sumcount函数,matlab.tall.reduce调用计算中间金额和元素数量。

函数泰bx = sumcount (tx) bx = [(tx)和元素个数(tx)和(ty)元素个数(ty)];结束

创建一个高的表,然后计算平均每年航班延误的数据。

创建一个高表airlinesmall.csv数据集,数据包含的信息到达和离开的时间我们的航班。从表中删除的行缺失数据和提取ArrDelay,DepDelay,一年变量。这些变量向量的抵达和起飞延误和年每个飞行相关的数据集。

ds = tabularTextDatastore (“airlinesmall.csv”,“TreatAsMissing”,“NA”);ds。SelectedVariableNames = {“ArrDelay”“DepDelay”“年”};tt =高(ds);tt = rmmissing (tt);

使用matlab.tall.reduce两个函数应用于高表。第一个函数结合了ArrDelayDepDelay变量找到总意味着每个航班的延误。功能决定了有多少独特的年每个块的数据,然后通过每年周期计算的平均总延误航班。结果是一个包含今年两变量表和平均总延迟。这个中间数据需要进一步减少到达每年平均延迟。保存这个函数在当前文件夹transform_fcn.m

类型transform_fcn
函数t = transform_fcn (a, b, c) 2 =收集(独特的(c));k = 1:长度(ii) jj = (c = = ii (k));d =意味着(((jj) b (jj)), 2);如果k = = 1 t =表(c (jj), d, VariableNames,{‘年’‘MeanDelay});其他t = [t;表(c (jj), d, VariableNames,{‘年’‘MeanDelay})];结束结束结束

第二个函数使用第一个函数的结果来计算平均每年总延迟。的输出reduce_fcn兼容的输出transform_fcn,这样的数据块可以以任意顺序连接不断地降低,直到只剩下一行每一年。

类型reduce_fcn
函数TT = reduce_fcn (t)[组Y] = findgroups (t.Year);D = splitapply (@mean, t。MeanDelay、组);TT =表(Y, D, VariableNames,{‘年’‘MeanDelay});结束

变换和减少函数应用于高大的向量。由于输入(类型)和输出(类型)有不同的数据类型,使用“OutputsLike”名称-值对将指定输出是一个表。一个简单的方法来指定输出的类型与虚拟输入调用转换函数。

一个= tt.ArrDelay;b = tt.DepDelay;c = tt.Year;d1 = matlab.tall。减少(@transform_fcn @reduce_fcn, a, b, c,“OutputsLike”{transform_fcn (0, 0, 0)})
d1) =(高表年MeanDelay ___ _____ ?吗?吗?吗?吗?吗?::::

收集到内存中看到结果平均每年总航班延误。

d1 =收集(d1)
评估高表达式使用当地的MATLAB会话:通过1 1:在2.6秒完成评估在3秒完成
d1 =22×2表年MeanDelay ___ _____ 1987 7.6889 1988 6.7918 1989 8.0757 1990 7.1548 1991 4.0134 1992 5.1767 1993 5.4941 1994 6.0303 1995 8.4284 1996 9.6981 1997 8.4346 1998 8.3789 1999 8.9121 2000 10.595 2001 6.8975 2002 3.4325⋮

替代方法

计算同一统计组的另一种方法是使用splitapply打电话给matlab.tall.reduce(而不是使用matlab.tall.reduce打电话给splitapply)。

使用这种方法,您的电话findgroupssplitapply直接在数据。这个函数mySplitFcn运行在每组数据包括调用matlab.tall.reduce。采用变换,减少功能matlab.tall.reduce不需要组织数据,所以这些功能只是在pregrouped数据执行计算吗splitapply传递给他们。

类型mySplitFcn
函数T = mySplitFcn (a, b, c) T = matlab.tall。减少(@non_group_transform_fcn @non_group_reduce_fcn,……“OutputsLike”, a, b, c {non_group_transform_fcn (0, 0, 0)});函数t = non_group_transform_fcn (a, b, c) d =意味着([b], 2);t =表(c, d, VariableNames,{‘年’‘MeanDelay});结束函数TT = non_group_reduce_fcn (t) D =意味着(t.MeanDelay);TT =表(t.Year (1), D, VariableNames,{‘年’‘MeanDelay});结束结束

调用findgroupssplitapply操作数据和应用mySplitFcn每组数据。

组= findgroups (c);d2 = splitapply (@mySplitFcn, a, b, c组);d2 =收集(d2)
评估高表达式使用当地的MATLAB会话:通过1 2:在0.68秒完成,通过2 2:在1.8秒完成评估在3.1秒完成
d2 =22×2表年MeanDelay ___ _____ 1987 7.6889 1988 6.7918 1989 8.0757 1990 7.1548 1991 4.0134 1992 5.1767 1993 5.4941 1994 6.0303 1995 8.4284 1996 9.6981 1997 8.4346 1998 8.3789 1999 8.9121 2000 10.595 2001 6.8975 2002 3.4325⋮

计算加权标准差和方差的一个高大数组使用向量的权重。这是一个如何使用的例子matlab.tall.reduce解决功能高数组不支持。金宝app

创建两个高大的随机数据的向量。tX包含随机数据,tP包含相应的概率,这样总和(tP)1。这些概率是合适的重量数据。

rng默认的tX =高(兰德(1 e4, 1));p =兰德(1 e4, 1);tP =高(正常化(p,“规模”、sum (p)));

编写一个恒等函数,返回输出等于输入。这种方法的转换步骤跳过matlab.tall.reduce并将数据直接传递到减少步骤,减少功能的反复应用,以减少数据的大小。

类型identityTransform.m
函数[A, B] = identityTransform = X (X, Y);B = Y;结束

接下来,编写一个函数来操作减少块高大的向量来计算加权方差和标准偏差。

类型weightedStats.m
函数[wvar wstd] = weightedStats (X, P) wvar = var (X, P);wstd =性病(X, P);结束

使用matlab.tall.reduce这些函数应用于高的数据块的向量。

[tX_var_weighted, tX_std_weighted] = matlab.tall。减少(@identityTransform @weightedStats tX, tP)
tX_var_weighted = MxNx……高的双重数组?吗?吗?…吗?吗?吗?…吗? ? ? ... : : : : : : tX_std_weighted = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :

输入参数

全部折叠

应用变换函数,指定为一个函数处理或匿名函数。每个输出的fcn必须是相同的类型作为第一个输入tX。您可以使用“OutputsLike”选择返回输出不同的数据类型。如果fcn返回一个以上的输出,那么输出必须都有相同的高度。

一般功能的签名fcn

(a, b, c,……)= fcn(x, y, z, ...)
fcn必须满足这些要求:

  1. 输入参数——输入(x, y, z,……)是装入内存的数据块。从各自的提取数据产生的块高输入数组(tX,泰,tZ,…)。输入(x, y, z,……)满足这些属性:

    • 所有的(x, y, z,……)有相同的大小在任何允许扩张后的第一个维度。

    • 的数据块(x, y, z,……)来自同一指数在高维度,假设高数组nonsingleton在高维度。例如,如果tXnonsingleton在高维度,那么第一组块可以吗x = tX (1:20000:)y =泰(1:20000:)

    • 如果第一个维度的(tX,泰,tZ,…)有一个大小1,那么相应的块(x, y, z,……)包括高数组中的所有数据。

  2. 输出参数——输出(a, b, c,……)是装入内存块,发送给相应的输出(助教、结核,tC,…)。输出(a, b, c,……)满足这些属性:

    • 所有的(a, b, c,……)必须具有相同的大小在第一维度。

    • 所有的(a, b, c,……)垂直连接有各自的结果之前的电话fcn

    • 所有的(a, b, c,……)被发送到相同的索引在第一维度在各自目的地输出数组。

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

    • F ([inputs1;inputs2]) = = (F (inputs1);F (inputs2)):应用功能连接的输入应该是一样的应用函数分别输入然后连接结果。

  4. 空输入——确保fcn可以处理的输入0的高度。空输入可能发生当一个文件是空的或如果你已经做了很多过滤数据。

例如,该函数接受两个输入数组,广场,并返回两个数组输出:

函数[xx, yy] = sqInputs (x, y) xx = x ^ 2;yy = y ^ 2;结束
保存这个函数访问的文件夹之后,您可以调用函数来广场tX用这个命令,找到最大值:
tA = matlab.tall。减少(@sqInputs @max tX,泰)

例子:tC = matlab.tall.reduce (@numel @sum, tX,泰)发现元素的数量在每一个街区,然后总结结果计算元素的总数。

数据类型:function_handle

减少功能应用,指定为一个函数处理或匿名函数。每个输出的reducefcn必须是相同的类型作为第一个输入tX。您可以使用“OutputsLike”选择返回输出不同的数据类型。如果reducefcn返回一个以上的输出,那么输出必须都有相同的高度。

一般功能的签名reducefcn

(rA, rB, rC,…)= reducefcn(a, b, c, ...)
reducefcn必须满足这些要求:

  1. 输入参数——输入(a, b, c,……)是装入内存块。返回的数据要么是输出块fcn或部分减少输出reducefcn为进一步减少再次手术。输入(a, b, c,……)满足这些属性:

    • 输入(a, b, c,……)有相同的尺寸在第一维度。

    • 对于一个给定的索引在第一维度,每一行的数据块(a, b, c,……)源于输入,或源于同一之前调用reducefcn

    • 对于一个给定的索引在第一维度,每一行的输入(a, b, c,……)为该指数源于相同的索引在第一维度。

  2. 输出参数——所有输出(rA, rB, rC,…)必须具有相同的大小在第一维度。此外,他们必须垂直concatenable与各自的输入(a, b, c,……)必要时,以便减少重复。

  3. 功能规则- - - - - -reducefcn必须满足这些功能规则(舍入误差):

    • (输入)= = F (F(输入)):应用函数重复相同的输入不会改变结果。

    • F ([input1;input2]) = = F ([input2;input1]):结果不应依赖于连接的顺序。

    • F ([input1;input2]) = = F ([F (input1);F (input2)]):应用功能连接的一些中间结果应该一样单独应用它,再次连接,并应用它。

  4. 空输入——确保reducefcn可以处理的输入0的高度。空输入可能发生当一个文件是空的或如果你已经做了很多过滤数据。这个调用,所有输入正确的类型和大小的块空数组维度第一。

减少一些合适的功能是内置的降维等功能总和,刺激,马克斯,等等。这些函数可以处理产生的中间结果fcn并返回一个单一的标量。这些函数的属性的顺序串连发生和减少操作应用的次数不改变最终的答案。等一些功能的意思是var通常,应避免减少功能,因为减少的次数操作应用可以改变最后的答案。

例子:tC = matlab.tall.reduce (@numel @sum tX)发现元素的数量在每一个街区,然后总结结果计算元素的总数。

数据类型:function_handle

输入数组,指定为标量、向量,矩阵或多维数组。输入数组作为输入变换函数fcn。每个输入数组tX,泰,…必须有高度兼容。两个输入兼容的高度时,他们有相同的高度,或者当一个输入的高度。

样机的输出数组,指定为数组。当你指定“OutputsLike”,输出数组助教,结核病,…返回的matlab.tall.reduce有相同的数据类型和属性指定的数组{PA、PB,…}

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

输出参数

全部折叠

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

大小和输出数组的数据类型取决于指定的函数fcnreducefcn。一般来说,输出助教,结核病,…都必须具有相同的数据类型作为第一个输入tX。然而,您可以指定“OutputsLike”返回不同的数据类型。输出数组助教,结核病,…都有相同的高度。

更多关于

全部折叠

高的组块

当您创建一个高大从数据存储阵列,底层数据存储便于计算期间的运动数据。离散的数据移动棋子,每个块是一组连续的行可以装入内存。例如,一个块的一个二维数组(如表)X (n: m:),对于一些下标n。每个块的大小是基于价值的ReadSize房地产的数据存储,但大小的块可能并不完全。的目的matlab.tall.reduce,一个高大的数组被认为是许多这样的块的垂直连接:

例如,如果您使用总和函数的变换函数,和中间结果每一块。因此,而不是返回一个标量值的和元素,结果是一个向量长度等于块的数量。

ds = tabularTextDatastore (“airlinesmall.csv”,“TreatAsMissing”,“NA”);ds。SelectedVariableNames = {“ArrDelay”“DepDelay”};tt =高(ds);tX = tt.ArrDelay;f = @ (x)和(x,“omitnan”);s = matlab.tall。减少(f, @ x (x), tX);s =收集(s)
s = 140467 101065 164355 135920 111182 186274 21321

介绍了R2018b