将函数应用于滚动窗口

2024-04-14

假设我有一个很长的清单A我想要计算的值(例如长度 1000)std100 对,即我想计算std(A(1:100)), std(A(2:101)), std(A(3:102)), ..., std(A(901:1000)).

在 Excel/VBA 中,可以通过编写例如以下内容轻松完成此任务:=STDEV(A1:A100)放在一个单元格中,然后一口气填满。现在我的问题是,如何在 Matlab 中有效地完成这一任务,而无需使用任何昂贵的 for 循环。


edit:是否也可以对时间序列列表执行此操作,例如什么时候A尺寸为 1000 x 4(即 4 个长度为 1000 的时间序列)?输出矩阵的尺寸应为 901 x 4。


注意:有关最快的解决方案,请参阅路易斯·门多的回答 https://stackoverflow.com/a/28079457/1011724

因此,首先为此使用 for 循环(特别是如果这些是您的实际尺寸)确实不会很昂贵。除非您使用的是非常旧版本的 Matlab,否则 JIT 编译器(当然还有预分配)会使 for 循环变得便宜。

其次 - 你尝试过 for 循环吗?因为在过早开始优化之前,您确实应该首先尝试简单的实现。

第三——arrayfun可以使其成为一个衬垫,但它基本上只是一个具有额外开销的 for 循环,并且如果您确实关心速度,则很可能比 for 循环慢。

最后一些代码:

n = 1000;
A = rand(n,1);
l = 100;

for 循环(几乎不庞大,可能很有效):

S = zeros(n-l+1,1);  %//Pre-allocation of memory like this is essential for efficiency!
for t = 1:(n-l+1)
    S(t) = std(A(t:(t+l-1)));
end

向量化(内存效率低下!)解决方案:

[X,Y] = meshgrid(1:l)
S = std(A(X+Y-1))

可能是更好的矢量化解决方案(和单行),但内存效率仍然低下:

S = std(A(bsxfun(@plus, 0:l-1, (1:l)')))

请注意,使用所有这些方法,您可以替换std任何函数,只要它适用于矩阵的列(这是 Matlab 中的标准)


进入 2D:

要进入 2D,我们需要进入 3D

n = 1000;
k = 4;
A = rand(n,k);
l = 100;

ind = bsxfun(@plus, permute(o:n:(k-1)*n, [3,1,2]), bsxfun(@plus, 0:l-1, (1:l)'));    %'
S = squeeze(std(A(ind)));
M = squeeze(mean(A(ind)));
%// etc...

OR

[X,Y,Z] = meshgrid(1:l, 1:l, o:n:(k-1)*n);
ind = X+Y+Z-1;
S = squeeze(std(A(ind)))
M = squeeze(mean(A(ind)))
%// etc...

OR

ind = bsxfun(@plus, 0:l-1, (1:l)');                                                  %'
for t = 1:k
    S = std(A(ind));
    M = mean(A(ind));
    %// etc...
end

或(取自路易斯·门多的回答 https://stackoverflow.com/a/28079457/1011724- 请注意,在他的回答中,他展示了这个简单循环的更快替代方案)

S = zeros(n-l+1,k);
M = zeros(n-l+1,k);
for t = 1:(n-l+1)
    S(t,:) = std(A(k:(k+l-1),:));
    M(t,:) = mean(A(k:(k+l-1),:));
    %// etc...
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将函数应用于滚动窗口 的相关文章

  • 将矩阵从 3d 重塑为 2d 并保持特定顺序

    我想将 4x3x5 形式的矩阵调整为 20x3 的二维矩阵 但同时保留顺序 如下所示 功能reshape 不保留这个特定的顺序 我怎样才能以最简单的方式实现这一点 让我们一劳永逸地解决这些跨越三维的串联和切割问题吧 第一部分 3D 到 2D
  • Matlab:通过扩展向量来扩展矩阵

    我有一个dxmxn matrix A 解释 对于每个n 有m维度向量d 我想将每个 d 维向量扩展如下 考虑一个向量v维度 d 1 2 d 它是 x 1 x 2 x d 但为了简单起见 我删除了 x 目标是延长v获得一个d d向量形式 1
  • 如何在不使用 MATLAB 的情况下打开 .mat 文件?

    我在Matlab中做了一个项目 现在我已经卸载了Matlab 现在 我需要一些我的项目的参考 我留下了所有 mat 文件 我正在尝试在记事本中打开它们 并且我在那里得到了 unicode 字符 我的问题很简单 如何在记事本或某些文字处理器中
  • 在不同长度的数组中查找相同的日期时间

    考虑以下儒略日期数组 Jday1 datenum 2011 01 01 00 00 yyyy mm dd HH MM 60 60 24 datenum 2011 12 31 23 00 yyyy mm dd HH MM Jday2 date
  • R和matlab中的qr函数

    我有一个关于将 matlab 函数转换为 R 的问题 我希望有人能提供帮助 matlab 和 R 中使用的标准 QR 分解称为 qr 据我了解 用两种语言执行 qr 分解的标准方法是 Matlab Q R qr A 满足QR A R z l
  • MATLAB 颜色条刻度标记错误?

    我正在绘制 9 个子图 如下图所示 其中一个颜色条代表三个子图 在这里我想将颜色条中的最高值显示为 gt value 令人惊讶的是 当我手动将刻度标签编辑为h TickLabels end gt h TickLabels end 颜色条开始
  • 如何从文本文件读取数据并将其推回向量?

    我有一个文本文件 test txt 它存储了我的数据 如下所示 每个分隔符字段之间有一个空格 代码 名称 Coy 045 Ted Coy1 054 Red Coy2 我如何从文件中读取这些数据并将其插入向量中 vector
  • 如何绘制 NxN 圆数组?

    我想绘制一个 NxN 的圆数组 为了形象化 我附上了我想要实现的目标的图像 我是 MatlLab 的新手 所以我尝试先绘制一个圆 下面是示例代码 n 2 10 size of mask M zeros n I 1 n x I n 2 mas
  • 计算向量中连续 1 和 0 的数量

    在 Matlab 中我有一个如下所示的向量 0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 0 1 0 1 我现在要做的是统计这个向量中1的个数 连续的 1 算作 1 此外 我还想计算 1 之间 0 的平均值和中
  • 在 MATLAB 中绘制圆

    我被要求找到在 MATLAB 中绘制圆的不同方法 看起来很无聊 不过我可以想出一些想法 有些可能效率低下 Method 1 ezpolar x 1 Method 2 t linspace 0 2 pi 100 plot sin t cos
  • 笛卡尔散点图上的极坐标网格线

    我有一个脚本来创建散点图 使用gscatter 基于另一个脚本生成的 x y 数据 离散数据点 不连续 由于这些数据点实际上是圆形空间中某些对象的位置 因此添加极坐标网格线将使绘图更有意义 有谁知道如何在笛卡尔散点图上显示极坐标网格线 或者
  • MATLAB:解包函数

    我正在与 Mathworks 的某人讨论 unwrap http www mathworks com access helpdesk help techdoc ref unwrap html函数中对于 以外的跳跃容差有一个 bug 并且希望
  • Numpy 提取网格数据的子集

    在我的应用程序中 我有一个从 meshgrid 命令获得的值矩阵及其坐标 经度 纬度 我想根据经度和纬度限制提取该矩阵的特定子区域 我已经尝试过这个解决方案 但它不起作用 我需要三个矩阵作为输出 一个用于数据 另外两个用于网格 Lons L
  • 有没有办法在 MATLAB 中执行函数内联?

    我可以使用什么语言功能或开箱即用的技巧来完成 MATLAB 中的函数内联 令人烦恼的是 Google 搜索 matlab 内联函数 http www google com search q matlab inline function揭示了
  • 是否可以将向量的一部分作为向量发送给函数? [复制]

    这个问题在这里已经有答案了 我想看看是否可以将向量的一部分传递给函数 以便它显示为函数的法线向量 更重要的是 我希望这可以在 O 1 的常数时间内完成 我不想迭代向量来创建一个新向量 事实上 我还希望在下面的示例中将新向量的大小更改为 40
  • 如何在 C++ 中将值从向量转换为映射?

    我想做这样的事情 有没有一个stl算法可以轻松做到这一点 for each auto aValue in aVector aMap aValue 1 如果您有一个对向量 其中对中的第一项将是映射的键 第二项将是与该键关联的值 您可以使用插入
  • 使用 lsqcurvefit 进行拟合

    我想将一些数据拟合到洛伦兹函数 但当我使用不同数量级的参数时 我发现拟合存在问题 这是我的洛伦兹函数 function value lorentz x x0 gamma amp value amp gamma 2 x x0 2 gamma
  • 如何在 MATLAB 中创建带有分级标记颜色的散点图?

    我想在 MATLAB 中绘制一个简单的散点图 标记颜色从光谱的一端到另一端各不相同 例如红色 橙色 黄色 蓝色 紫色 我的数据比较了一段时间内河流的水量和水质 3 个简单的列 时间 水量 质量 我想绘制数量与质量的 x y 散点图 但颜色随
  • 我可以合法地写入常量向量指向的数据吗?把它分类?

    我有一个常量整数向量const vector
  • 与超类和子类构造函数接口

    我在 matlab 文档和之前有关使用 matlab 继承和类构造函数创建接口的问题中找不到帮助 为了使其整洁 放在一个包内 我可以将其压缩如下 而不是拖拽代码 一套 MyPkg有一个超类Super和一些子类Sub1 Sub2 我的大多数属

随机推荐

  • iOS(React Native):使用 React 导航呈现的标题顶部不必要的空间

    路由配置 Author Rahul Date 25 Feb 2018 Routes flow import React from react import View Text from react native import StackNa
  • Oracle 11g 向后兼容较旧的 Oracle 版本

    我们的组织正计划将其大部分 Oracle 服务器和客户端升级到 11g 第 2 版 但我们的一个客户端系统仍然使用oracle 8i安装 我们可以从oracle 11g客户端访问Oracle 8i的对象吗 一些博客说它应该起作用 而另一些则
  • 从表中删除<字段最大数量的记录并保留最大数量

    我知道这听起来相当令人困惑 但我不知道如何更好地解释它 我有一个简化的表格如下 DB Type ID Table1 1 Table1 2 Table1 3 Table1 4 Table1 5 Table2 6 Table2 7 Table2
  • 如何使用 Flutter Navigator 推送多条路由

    如果我将颤动中的路线推送到应用程序的深处 是否有任何方法可以提供额外的路线 以便可以自定义后退 向上导航 您可以致电Navigator push https api flutter dev flutter widgets Navigator
  • C++ 中奇怪的方括号表示法,看起来有点像 foreach 循环

    代码如下所示 auto generateHash std vector
  • Java获取无线网络的SSID等信息

    我正在尝试用 Java 获取无线网络设备的 SSID 我尝试了官方网络教程http java sun com docs books tutorial networking nifs retriving html http java sun
  • 无需root设备即可卸载系统应用程序

    有没有办法在不root设备的情况下将apk推送到系统 应用程序文件夹 我找到了几种在 root 设备上执行此操作的方法 但我正在寻找一种无需先 root 设备即可执行此操作的方法 如果有任何区别 我想在三星 S4 上执行此操作并使用 twr
  • 如何在远程服务器上使用 gpg 签名密钥?

    有没有办法在Linux上通过gpg程序 命令行工具 在远程服务器中使用gpg密钥进行签名 我正在使用 gpg 使用测试密钥在本地主机上签署二进制文件 现在我想使用服务器访问的相同类型的密钥 我正在通过更改 gpg 工具的参数来寻找实现 你可
  • BIM服务器数据库访问

    我是一名 Java 开发人员 最近我公司正计划使用BIM Server 概念是 BIM 服务器将与我们当前的项目集成 我们将通过一些 API 访问 BIM 服务器数据库 我与本地 BIM 服务器建立连接 创建项目并使用 JsonBimSer
  • 如何找到字符列的MAX()值?

    我们有遗留表 其中复合键的列部分之一手动填充了值 code 001 002 099 etc 现在 我们有一个功能请求 其中我们必须知道 MAX code 才能为用户提供下一个可能的值 在示例情况下 上面的下一个值是 100 我们尝试对此进行
  • 禁用除第一列之外的每一列的排序

    我目前正在将数据表用于自定义系统 我想对除第一列之外的每一列禁用排序 我尝试使用以下代码 当我添加用逗号分隔的值时 它工作正常 aoColumnDefs bSortable false aTargets 1 2 3 4 但我的表列号因每个单
  • SQL Server 中的条件 WHERE 子句

    我正在创建一个 SQL 查询 其中需要条件where条款 它应该是这样的 SELECT DateAppr TimeAppr TAT LaserLTR Permit LtrPrinter JobName JobNumber JobDesc A
  • 如何从 Lambda 表达式的字符串动态创建方法

    我的最终目标是创建一个函数 将方法名称动态传递给 Hangfire 库中的类 例如 以下是有效的非动态代码 RecurringJob AddOrUpdate gt myFunction Cron Hourly AddOrUpdate 第一个
  • 使用 Assembly.LoadFrom 加载泛型类型

    参考 Jon Skeet 的回答 将实例化的 System Type 作为泛型类的类型参数传递 https stackoverflow com q 266115 592111 我需要根据泛型类型的名称以及作为泛型类型参数的类型名称来加载泛型
  • 如何使用 Win2D 计算 FontFamily 的高度(行距)?

    我想知道如何在 Window 通用应用程序中计算给定字体的高度 及其属性 如大小 粗细 样式 使用Win2D 我以前用过一个CanvasTextLayout 但它需要一个text工作 就像这一行 var ctl new CanvasText
  • Angularjs 的 $http.get 在 IE11 中只执行一次

    我正在学习 angularjs 作为一个测试项目 我正在轮询返回活动进程 它们的 pid 列表并显示这些的服务器 客户端代码如下所示
  • CodeIgniter 和 AJAX 表单提交

    我正在尝试将从表单提交的数据保存到我的 mysql 数据库中 然后将最后发布的项目添加到 div 列表中来更新 div 元素 现在我只是想得到回复 我并不担心目前的格式是否正确 我的问题是表单不会提交e preventDefault 到位
  • Keras Concatenate TypeError:__init__() 得到参数“axis”的多个值

    我目前正在尝试重新创建 Unet 在需要合并两层输出的 上卷积 部分 我得到了提到的错误 类型错误 init 获得参数 轴 的多个值 喀拉斯版本 2 0 6 张量流 GPU 1 2 1 代码片段 import gzip import os
  • 在 Hibernate 4 中创建会话工厂

    我在 Hibernate 4 中生成会话工厂时遇到问题 在 Hibernate 3 中我简单地做了 org hibernate cfg Configuration conf HibernateUtil getLimsInitializedC
  • 将函数应用于滚动窗口

    假设我有一个很长的清单A我想要计算的值 例如长度 1000 std100 对 即我想计算std A 1 100 std A 2 101 std A 3 102 std A 901 1000 在 Excel VBA 中 可以通过编写例如以下内