此函数将基于用户指定为统计信息(例如平均值,总和等)的内容来总结数据(即1列)的1-d向量。它使用没有循环,所以它非常快。但是,它将使用备忘录。我包括内存检查,这样如果您没有足够的内存,它将使用循环执行移动概要。因此,需要几秒钟,需要一分钟。
该函数将汇总移动窗口上的数据,每次增加一个值。例如,如果数据是按小时计算的,并且用户想要7天的平均值(即168小时),那么将计算每个1小时增量的平均值,每次1小时滑动7天窗口。
更新时间:10/14/2010 - 简化的功能,使用更少的内存。
更新:10/14/2010 -不再猜测内存使用。采用精确解。
示例语法:
dataout = thopeStat(日期,20,@和);
杰夫伯克(2021年)。使用没有循环的滑动窗口总结数据(//www.tatmou.com/matlabcentral/fileexchange/29029-summarizes-data-using-a-sliding-window-without-loops), MATLAB中央文件交换。检索。
好吧,我发誓当我打字时,我有一个未定义的功能,但我再次这样做了。魔法!!谢谢约翰。
有趣的是,当我在帮助搜索中输入conv时,它没有出现,而是出现了一大堆的convert ' nothing convolution ',这导致了conv。一旦我在帮助中找到了conv,它就会出现。
函数conv是matlab基础的一部分。每个人都有。你可以通过打字找到它
据
在命令行。
谢谢克里斯。我以前从未听说过。在MathWorks上线,它不是Apparant的函数在......可能是信号处理吗?我可以找到函数文档,但我无法讲述它的工具箱。因此,虽然我想使用你的解决方案,但它没有给我。我只有统计工具箱,CONV不在该工具箱中。至少我仍然对人们有一些效用!谢谢你的输入。我相信这些对话对所有感兴趣都非常有帮助。
conv(数据,oon(n,1),'有效');
和
总和(数据(REPMAT(0:N-1,L-N + 1,1)+ Cumsum(L-N + 1,N))),2)
但是,2个数量级更快(在1x1e6数据阵列上测试)。
当然,这不会概括到均值或总和以外的东西(但请注意,STD和VAR可以使用平均滤波器构建)。例如,您的功能仍然适用于中位数。
别,
一切皆有可能。假设图像是BW,这在概念上似乎是可行的。你想要在一个特定的方向总结,还是一个矩形/正方形?不管怎样,我认为总结一下你的2D,你可以在3D中处理它。第三个空间会给你一个二维空间的窗口。就像这个函数一样,第二次空间给出了一维空间中的窗口。但是,你会有一个边缘效果,它会在两个方向上减少你的图像N个像素。我不确定这对你是否有效。如果你需要处理后的完整图像,你必须想出一个方案,允许缩小窗口或反射回来,因为它超过边缘。我希望这能讲得通。 I don't really do much image processing except in ArcGIS, which has those types of tools/functions. Which makes me think that MATLAB image processing toolbox may have something like this already?
嗨杰夫,
我还没有看过这个功能,但这正是我正在寻找的,但是对于图像(即2d)。
你觉得我可以概括吗?或者你能帮助我做到这一点。
谢谢
在Rob的评论之后,它让我想到了Kevin的评论。我非常简化了功能和内存使用情况。以下是执行操作所需的整个代码。我作为一个例子插入了sum。我已经更新了该文件,应该很快出现。
总和(数据(REPMAT(0:N-1,L-N + 1,1)+ Cumsum(L-N + 1,N))),2)
显然,你是因为repmat使用了很多的公羊。为什么不重新展示?没有循环,没有内存呼吸。玩具例子:
t = [1,1,1,2,2,2,3,3];
r =重塑(t,3,3)
ans =.
1 2 3
1 2 3
1 2 3
> >的意思是(右)
ans =.
1 2 3
谢谢凯文。加法运算是可行的,但问题是如何在一个滑动窗口上执行类似的操作,比如在一个滑动窗口上,一个小时可以累计30天的时间?如果有使用罐装函数的更内在的方法,我愿意听取建议。谢谢你的反馈!!
你可能想单独处理像@sum或@mean这样的情况,因为它们都可以很容易地计算出来,不用使用加和和减法循环。几乎所有涉及数据函数(例如,mean, var, std)和的估计量都可以在没有循环或大量额外内存分配的情况下进行计算。