将函数应用于滚动窗口

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(使用前将#替换为@)

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

  • 检查Matlab中脚本需要使用的函数

    我有一个别人写的代码包 我正在运行一个脚本 它调用一些函数 这些函数又调用更多函数 等等 我想获取不是 MATLAB 内置函数但属于包的一部分的函数列表 我尝试使用matlab codetools requiredFilesAndProdu
  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • 在另一列中添加具有特定条件的一列,如 excel 的 sumif

    我有一个像这样的矩阵 A 1 2 2 3 3 4 4 5 5 6 6 8 7 9 8 5 9 4 现在我想添加第二列 条件是如果 limit 0 interval 3 且 limit limit interval 或者换句话说 当第 1 列
  • 在 clang 中向量化函数

    我正在尝试根据此用 clang 对以下函数进行矢量化铿锵参考 http llvm org docs Vectorizers html 它采用字节数组向量并根据以下条件应用掩码this RFC https www rfc editor org
  • std::vector 的复制构造函数如何运行?

    一个如何std vector
  • Idris - 自定义相关数据类型上的映射函数失败

    我对 idris 和依赖类型相对较新 遇到了以下问题 我创建了一个类似于向量的自定义数据类型 infixr 1 data TupleVect Nat gt Nat gt Type gt Type where Empty TupleVect
  • 在显式实例化 vector 时,someType 默认构造函数的用途是什么?

    这是一个练习 来自C 入门第五版 练习 16 26 假设 NoDefault 是一个没有 默认构造函数 我们可以显式实例化吗vector
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • Matlab 字段名索引[重复]

    这个问题在这里已经有答案了 所以我有一个包含多个表的元胞数组 我试图访问表的第一个列名称 c table1 table2 table3 以下两行都给了我错误 fieldnames c 1 1 fieldnames c 1 1 Error i
  • Matlab没有优化以下内容吗?

    我有一个很长的向量 1xrv 和一个很长的向量w1xs 和一个矩阵Arxs 它是稀疏的 但维度非常大 我期望 Matlab 对以下内容进行优化 这样我就不会遇到内存问题 A v w 但看起来 Matlab 实际上是在尝试生成完整的v w矩阵
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 括号中的波形符字符

    在 MATLAB 中 以下代码执行什么操作 m func returning matrix 波浪号运算符 的作用是什么 在 Matlab 中 这意味着不要将函数中相应的输出参数分配到赋值的右侧 因此 如果func returning mat
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参
  • LibGDX 将 Vector2 与浮点值相乘

    有没有办法将 Vector2 与浮点值相乘 我曾经在 XNA 中这样做 通过将归一化方向向量与速度浮点数相乘来计算运动 这几乎是我的代码中使事情正常工作的最后一步 但似乎没有用于接受浮点值的 Vector2 的乘法函数 我可以手动将 x 和
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • MATLAB - 冲浪图数据结构

    我用两种不同的方法进行了计算 对于这些计算 我改变了 2 个参数 x 和 y 最后 我计算了每种变体的两种方法之间的 误差 现在我想根据结果创建 3D 曲面图 x gt on x axis y gt on y axis Error gt o
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • Matlab 的 imresize 函数中用于插值的算法是什么?

    我正在使用 Matlab Octaveimresize 对给定的二维数组重新采样的函数 我想了解如何使用特定的插值算法imresize works 我在Windows上使用八度 e g A 1 2 3 4 是一个二维数组 然后我使用命令 b

随机推荐

  • 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 中 可以通过编写例如以下内