对数据块应用约简算法来约简数组
创建一个高表格,从表格中提取一个高向量,然后查找向量中的元素总数。
创建一个高的桌子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)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.84 sec
s=123523
创建一个高表,从表中提取两个高向量,然后计算每个向量的平均值。
创建一个高的桌子airlinesmall.csv
数据集。这些数据包含了美国航班到达和离开时间的信息。提取ArrDelay
和DepDelay
变量,是到达和离开延误的矢量。
ds = tabularTextDatastore (“airlinesmall.csv”,“TreatAsMissing”,“NA”);ds。SelectedVariableNames = {“ArrDelay”“DepDelay”}; tt=高(ds);tt=RMM缺失(tt);tX=tt.arr延迟;tY=tt.depday;
在算法的第一阶段,计算向量中每个数据块的总和和元素计数。为此,您可以编写一个函数,该函数接受两个输入并返回一个输出,每个输入的总和和计数。该函数在示例末尾作为局部函数列出。
作用bx=sumcount(tx,ty)bx=[sum(tx)numel(tx)sum(ty)numel(ty)];结束
在算法的简化阶段,您需要将所有中间的和和计数加在一起。因此,matlab.tall.reduce
返回每个输入向量的元素总数和元素数量,然后计算平均值是一个简单的除法。对于这个步骤,您可以应用总和
函数的第一个维度的1 × 4向量输出从第一阶段。
Reducefcn = @(x) sum(x,1);s = matlab.tall.reduce (@sumcount reducefcn tX,泰)
s = MxNx……高双数组???...???...? ? ? ... : : : : : :
s =收集(s)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 2.1 sec
s =1×4860584 120866 982764 120866
前两个要素年代
合计和算数吗tX
,后两个元素是泰
.将总和和计数相乘得到平均值,可以将其与返回的结果进行比较的意思是
函数。
My_mean = [s(1)/s(2) s(3)/s(4)]
my_mean =1×27.1201 - 8.1310
m = gather(mean([tX tY]))
using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.56 sec
m=1×27.1201 - 8.1310
本地函数
这里列出的是sumcount
函数,matlab.tall.reduce
调用以计算中间和和和元素计数。
作用bx=sumcount(tx,ty)bx=[sum(tx)numel(tx)sum(ty)numel(ty)];结束
创建一个高表,然后在数据中计算每年的平均航班延误。
创建一个高的桌子airlinesmall.csv
数据集。这些数据包含了美国航班到达和离开时间的信息。从表中删除丢失的数据行并提取ArrDelay
,DepDelay
和一年
变量。这些变量是数据集中每个航班的到达和起飞延迟以及相关年份的向量。
ds = tabularTextDatastore (“airlinesmall.csv”,“TreatAsMissing”,“NA”);ds。SelectedVariableNames = {“ArrDelay”“DepDelay”“年”};tt =高(ds);tt = rmmissing (tt);
使用matlab.tall.reduce
将两个函数应用到高桌子上。第一个函数结合了ArrDelay
和DepDelay
变量,求每个航班的总平均延误。该函数确定每个数据块中有多少个独特的年份,然后对每年进行循环,并计算该年的航班平均总延误。结果是一个包含年份和平均总延迟的双变量表。这一中间数据需要进一步减少,以达到每年的平均延迟。将此函数保存在当前文件夹中为transform_fcn.m
.
类型transform_fcn
函数t = transform_fcn(a,b,c) ii = gather(unique(c));For k = 1:length(ii) jj = (c == ii(k));D = mean([a(jj) b(jj)], 2);如果k == 1 t = table(c(jj),d,'VariableNames',{'Year' 'MeanDelay'});Else t = [t;表(c (jj), d, VariableNames,{‘年’‘MeanDelay})];结束结束结束
第二个函数使用第一个函数的结果来计算每年的平均总延迟。的输出reduce_fcn
是否与输出兼容transform_fcn
,这样数据块可以按任何顺序连接,并不断减少,直到每年只剩下一行。
类型reduce_fcn
函数TT = reduce_fcn(t) [groups,Y] = findgroups(t. year);D = splitapply(@mean, t.MeanDelay, groups);TT = table(Y,D,'VariableNames',{'Year' 'MeanDelay'});结束
对高向量应用变换和约简函数。由于输入(type双
)和输出(类型桌子
)有不同的数据类型,请使用“OutputsLike”
指定输出为表的名称-值对。指定输出类型的一种简单方法是使用虚拟输入调用transform函数。
一个= tt.ArrDelay;b = tt.DepDelay;c = tt.Year;d1 = matlab.tall。reduce(@transform_fcn, @reduce_fcn, a, b, c,)“OutputsLike”{transform_fcn (0, 0, 0)})
d1 = Mx2高表年份MeanDelay ____ _________ ??????: : : :
将结果收集到内存中,以查看每年平均的总航班延误。
d1 =收集(d1)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.5 sec
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
).
使用这种方法,调用findgroups
和splitapply
直接在数据上。这个函数mySplitFcn
对每组数据进行操作的,包括对matlab.tall.reduce
.所采用的变换和约简函数matlab.tall.reduce
不需要对数据进行分组,所以这些函数只是对预先分组的数据进行计算splitapply
传递给他们。
类型mySplitFcn
mySplitFcn(a,b,c) . mySplitFcn(a,b,c) . mySplitFcn(a,b,c)。减少(@non_group_transform_fcn @non_group_reduce_fcn,……a, b, c, 'OutputsLike', {non_group_transform_fcn(0,0,0)});函数t = non_group_transform_fcn(a,b,c) d = mean([a b], 2);t = table(c,d,'VariableNames',{'Year' 'MeanDelay'});end函数TT = non_group_reduce_fcn(t) D = mean(t. meandelay);TT = table(t.Year(1),D,'VariableNames',{'Year' 'MeanDelay'});结束结束
调用findgroups
和splitapply
对数据进行操作并应用mySplitFcn
对每组数据。
groups=findgroups(c);d2=splitapply(@mySplitFcn,a,b,c,groups);d2=gather(d2)
using the Local MATLAB Session: - Pass 1 of 2: Completed in 0.65 sec - Pass 2 of 2: Completed in 1.8 sec
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
解决高数组还不支持的功能。万博1manbetx
创建两个随机数据的高向量。tX
包含随机数据,以及tP
包含相应的概率,以便总和(总分)
是1
.这些概率适合于对数据进行加权。
rng默认的tX=高(兰特(1e4,1));p=兰特(1e4,1);tP=高(标准化(p,“规模”、sum (p)));
编写一个恒等函数,返回与输入相等的输出。这种方法跳过的转换步骤matlab.tall.reduce
并将数据直接传递到约简步骤,在该步骤中反复应用约简函数来减小数据的大小。
类型identityTransform.m
函数[A,B]=标识转换(X,Y)A=X;B=Y;结束
接下来,编写一个约简函数,对高向量块进行操作,以计算加权方差和标准偏差。
类型weightedStats.m
function [wvar, wstd] = weightedStats(X, P) wvar = var(X,P);wstd =性病(X, P);结束
使用matlab.tall.reduce
将这些函数应用于高向量中的数据块。
[tX_var_weighted, tX_std_weighted] = matlab.tall. txt . txt。减少(@identityTransform, @weightedStats, tX, tP)
tX_var_weighted = MxNx……高双数组???...???...? ? ? ... : : : : : : tX_std_weighted = MxNx... tall double array ? ? ? ... ? ? ? ... ? ? ? ... : : : : : :
fcn
- - - - - -要应用的转换函数要应用的转换函数,指定为函数句柄或匿名函数fcn
必须与第一个输入的类型相同tX
.你可以使用“OutputsLike”
返回不同数据类型输出的选项。如果fcn
返回多个输出,那么所有输出必须具有相同的高度。
的通用功能签名fcn
是
[a, b, c,…]= fcn(x, y, z, ...)
fcn
必须满足以下要求:
输入参数-输入[x, y, z,…]
是适合于内存的数据块。块是通过从各自的高数组输入中提取数据而产生的[tX, tY, tZ,…]
.输入[x, y, z,…]
满足这些属性:
全部[x, y, z,…]
在任何允许的扩展后,在第一个维度中有相同的尺寸。
数据块[x, y, z,…]
来自高维中的相同索引,假设高维中的高维数组是非单例的。例如,如果tX
和泰
如果非单例在高维中,那么第一组块可能是x = tX (1:20000:)
和y=tY(1:20000,:)
.
如果任意一个的第一维[tX, tY, tZ,…]
的大小1
,然后是相应的块[x, y, z,…]
由该高数组中的所有数据组成。
输出参数——输出[a, b, c,…]
块是否适合内存,要发送到各自的输出[tA, tB, tC,…]
.产出[a, b, c,…]
满足这些属性:
全部[a, b, c,…]
在第一个维度中必须有相同的大小。
全部[a, b, c,…]
是否与之前调用的结果垂直连接fcn
.
全部[a, b, c,…]
在各自的目标输出数组中发送到第一维度中的相同索引。
功能规则- - - - - -fcn
必须满足功能规则:
F([inputs1;inputs2])==[F(inputs1);F(inputs2)]
:将函数应用于串联输入应与将函数单独应用于输入,然后串联结果相同。
空输入-确保fcn
可以处理高度为0的输入。当文件为空或对数据进行了大量过滤时,可能会出现空输入。
例如,这个函数接受两个输入数组,将它们平方,然后返回两个输出数组:
作用[xx,yy] = sqInputs(x,y) xx = x.^2;yy = y ^ 2;结束
tX
和泰
并使用此命令查找最大值:tA=matlab.toll.reduce(@sqInputs,@max,tX,tY)
例子:tC = matlab.tall.reduce (@numel @sum, tX,泰)
查找每个块中的元素数量,然后对结果求和,计算元素总数。
数据类型:function_handle
还原
- - - - - -应用约简函数要应用的还原函数,指定为函数句柄或匿名函数。每个输出的还原
必须与第一个输入的类型相同tX
.你可以使用“OutputsLike”
返回不同数据类型输出的选项。如果还原
返回多个输出,那么所有输出必须具有相同的高度。
的通用功能签名还原
是
[rA, rB, rC,…]= reducefcn(a, b, c, ...)
还原
必须满足以下要求:
输入参数-输入[a, b, c,…]
是适合于内存的块。这些数据块要么是由fcn
,或部分减少的产量还原
为了进一步缩小,正在再次动手术。输入[a, b, c,…]
满足这些属性:
输入[a, b, c,…]
在第一个维度中具有相同的大小。
对于第一个维度中的给定索引,数据块的每一行[a, b, c,…]
来源于输入,或者来源于相同的前一个调用还原
.
对于第一维中的给定索引,输入的每一行[a, b, c,…]
因为该索引起源于第一个维度中的同一个索引。
输出参数——所有输出[rA, rB, rC,…]
在第一个维度中必须有相同的大小。此外,它们必须与各自的输入垂直连接[a, b, c,…]
必要时允许重复减少。
功能规则- - - - - -还原
必须满足以下功能规则(至四舍五入错误):
F(输入)==F(F(输入))
:对相同的输入重复应用该函数不会改变结果。
F ([input1;input2]) = = F ([input2;input1])
:结果不应取决于连接顺序。
F ([input1;input2]) = = F ([F (input1);F (input2)])
:将函数应用一次到一些中间结果的连接上,应该与单独应用它、连接它、再应用它相同。
空输入-确保还原
可以处理高度为0的输入。当文件为空或您对数据进行了大量筛选时,可能会出现空输入。对于此调用,所有输入块都是空数组,其类型和大小均正确,超出第一个维度。
合适的降维函数的一些示例是内置的降维函数,例如总和
,刺激
,最大值
,等等。这些函数可以处理由生成的中间结果fcn
并返回单个标量。这些函数具有这样的属性:连接发生的顺序和约简操作的次数不会改变最终的答案。一些函数,例如的意思是
和var
,通常应避免作为还原函数,因为应用还原操作的次数可能会改变最终答案。
例子:tC = matlab.tall.reduce (@numel @sum tX)
查找每个块中的元素数量,然后对结果求和,计算元素总数。
数据类型:function_handle
tX
,泰
- - - - - -输入数组输入数组,指定为标量、向量、矩阵或多维数组。输入数组用作转换函数的输入fcn
.每个输入阵列tX,泰,…
必须具有兼容的高度。当两个输入具有相同的高度,或者当一个输入的高度为1时,它们具有兼容的高度。
帕
,PB
- - - - - -输出阵列原型输出数组的原型,指定为数组。当你指定“OutputsLike”
,输出数组助教,结核病,…
返回的matlab.tall.reduce
具有与指定数组相同的数据类型和属性{PA、PB,…}
.
例子:tX, tA = matlab.tall.reduce (fcn reducefcn OutputsLike, {int8 (1)});
,在那里tX
是一个双精度高数组,返回助教
作为int8
而不是双
.
助教
,结核病
——输出数组输出数组,以标量、向量、矩阵或多维数组的形式返回。如果有matlab.tall.reduce
为高,则所有输出参数也是高的。否则,所有输出参数都是内存数组。
输出数组的大小和数据类型取决于指定的函数fcn
和还原
.一般来说,输出助教,结核病,…
必须与第一个输入具有相同的数据类型tX
.但是,您可以指定“OutputsLike”
返回不同的数据类型。输出数组助教,结核病,…
它们的高度都一样。
从数据存储创建高数组时,底层数据存储有助于在计算过程中移动数据块或大块,其中每个块是一组可以放入内存的连续行。例如,2-D数组(如表)的一个块是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。reduce(f, @(x) x, tX);s =收集(s)
S = 140467 101065 164355 135920 111182 186274 21321
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。