C 中的滚动中值算法

2023-11-26

我目前正在研究一种用 C 语言实现滚动中值滤波器(类似于滚动均值滤波器)的算法。从我对文献的搜索来看,似乎有两种相当有效的方法可以实现。第一种是对初始值窗口进行排序,然后执行二分搜索以插入新值并在每次迭代时删除现有值。

第二个(来自 Hardle 和 Steiger,1995,JRSS-C,算法 296)构建了一个双端堆结构,一端是 maxheap,另一端是 minheap,中间是中位数。这产生了一种线性时间算法,而不是 O(n log n) 的算法。

这是我的问题:实现前者是可行的,但我需要在数百万个时间序列上运行它,因此效率非常重要。事实证明后者非常难以实施。我在 R 的 stats 包代码的 Trunmed.c 文件中找到了代码,但它相当难以解读。

有谁知道线性时间滚动中值算法的编写良好的 C 实现吗?

编辑:链接到 Trunmed.c 代码


我看过R的src/library/stats/src/Trunmed.c有几次,因为我想要在独立的 C++ 类/C 子例程中也有类似的东西。请注意,这实际上是两个实现合二为一,请参见src/library/stats/man/runmed.Rd(帮助文件的来源)上面写着

\details{
  Apart from the end values, the result \code{y = runmed(x, k)} simply has
  \code{y[j] = median(x[(j-k2):(j+k2)])} (k = 2*k2+1), computed very
  efficiently.

  The two algorithms are internally entirely different:
  \describe{
    \item{"Turlach"}{is the Härdle-Steiger
      algorithm (see Ref.) as implemented by Berwin Turlach.
      A tree algorithm is used, ensuring performance \eqn{O(n \log
        k)}{O(n * log(k))} where \code{n <- length(x)} which is
      asymptotically optimal.}
    \item{"Stuetzle"}{is the (older) Stuetzle-Friedman implementation
      which makes use of median \emph{updating} when one observation
      enters and one leaves the smoothing window.  While this performs as
      \eqn{O(n \times k)}{O(n * k)} which is slower asymptotically, it is
      considerably faster for small \eqn{k} or \eqn{n}.}
  }
}

很高兴看到它以更独立的方式重新使用。你是自愿的吗?我可以帮助解决一些 R 位问题。

Edit 1:除了上面旧版本 Trunmed.c 的链接之外,这里还有当前的 SVN 副本

  • Srunmed.c(适用于 Stuetzle 版本)
  • Trunmed.c(针对图拉赫版本)
  • runmed.R对于调用这些的 R 函数

Edit 2:Ryan Tibshirani 有一些 C 和 Fortran 代码快速中值合并这可能是窗口方法的合适起点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中的滚动中值算法 的相关文章

  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 如何自动启动我的 ec2 实例、运行命令然后将其关闭?

    我想每周对 redshift postgres 数据库中的数据运行一次机器学习模型 我使用以下命令将 R 脚本设置为休息 apiplumbr然后我将其设置为一项任务来管理pm2 我有它 所以任务会在ec2实例启动然后继续运行 要让 R 脚本
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • 合并数据框而不重复行

    我想合并两个数据框 但如果有多个匹配项 则不想重复行 相反 我想总结一下那天的观察结果 来自 合并 提取两个数据框中与指定列匹配的行并将其连接在一起 如果有多个匹配项 则所有可能的匹配项各贡献一行 这是一些示例代码 days lt as d
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 通过不同 DLL 或 EXE 中的指针或引用访问 STL 对象时发生访问冲突

    我在使用旧版 VC6 时遇到以下问题 我只是无法切换到现代编译器 因为我正在处理遗留代码库 http support microsoft com kb 172396 http support microsoft com kb 172396
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor
  • 从 R 中的方差分析 (glm) 中提取残余偏差

    我在 R 中安装了一个 glm 模型并采用了方差分析表 我需要提取 残余偏差 列 但它会产生错误 以下是代码 创建数据 counts lt c 18 17 15 20 10 20 25 13 12 outcome lt gl 3 1 9 t
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 热重载时调用方法

    我正在使用 Visual Studio 2022 和 C 制作游戏 我想知道当您热重新加载应用程序 当它正在运行时 时是否可以触发一些代码 我基本上有 2 个名为 UnloadLevel 和 LoadLevel 的方法 我想在热重载时执行它
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12

随机推荐

  • 为什么 xdebug 没有出现在 phpinfo() 中

    我正在尝试进行以下设置工作 Windows 7 64 位 XAMPP 1 7 4 XDebug php xdebug 2 1 0 5 3 vc9 x86 64 dll 当我从 Xampps 主页运行 phpinfo 时 XDebug 它没有
  • 使用go静态文件服务器时如何自定义处理找不到文件?

    所以我使用 go 服务器来提供单页 Web 应用程序 这适用于为根路由上的所有资产提供服务 所有 CSS 和 HTML 均已正确提供 fs http FileServer http Dir build http Handle fs 所以当网
  • 在 CouchDB 中按键返回唯一值

    有没有办法在 CouchDB 中执行以下操作 一种通过给定键返回唯一 不同值的方法 SELECT DISTINCT field FROM table WHERE key key1 key1 gt somevalue key1 gt some
  • 具有有关文件的自定义元数据的 ItemGroup

    我正在尝试创建一个 文件 任务项组 其中包含名为 TargetPath 的元数据属性 其中填充了文件的相对路径 Example 对于这些路径 D 测试 Blah exeD 测试 配置 fun configD Test en US my re
  • 未找到类异常 com.squareup.okhttp.logging.HttpLoggingInterceptor

    即使在添加依赖项并导入类之后 我仍然收到 java lang NoClassDefFoundError com squareup okhttp logging HttpLoggingInterceptor 有人可以帮忙吗 Gradle 构建
  • 在 Angular 中更新/合并 i18n 翻译文件

    我们最近决定为我们的应用程序支持多种语言 Angular 13 x 经过研究 我们决定使用angular localize看起来很适合我们的需求的包 一切似乎都在解决唯一的问题 即在后续的构建和更改中保持翻译文件最新 因此 请遵循 Angu
  • 取消 DataAdapter.Fill()

    设想 我们有一个附加到 DataAdapter 数据表 的 DataGridView 我们在单独的线程 使用 delegate 和 beginInvoke 中使用 adapter fill query datatable 将数据加载到数据表
  • 通过 Node JS 使用文件内容确定 MIME 类型

    似乎所有流行的 Node js MIME 类型库都只是使用文件扩展名 而不是通过查看文件来确定 MIME 类型 有没有一种好方法可以使用 Node 跳转到文件并智能地确定文件的 MIME 类型 以防扩展名不存在 确实感觉很可惜 最受欢迎的M
  • SQL Server Raiserror 不会在 .NET 客户端中引起异常

    我在 SQL Server 2005 数据库上有一个存储过程 其中有如下语句 IF Condition 0 BEGIN RAISERROR some error message 16 1 RETURN END 它是从 C 客户端调用的 如下
  • 如何将 List 绑定到 gridview?

    这可能是一个非常奇怪的问题 因为通常人们只将复杂类型绑定到网格视图 但我需要绑定一个 Int 列表 对于字符串也是如此 通常 由于要绑定的属性使用对象的属性名称 但是当使用 Int 或 String 时 该值正是对象本身 而不是属性 获取对
  • __init__.py 的目的是什么? [复制]

    这个问题在这里已经有答案了 创建 Python 包时 我被告知创建一个名为的空白文件init py 我不明白的是为什么我需要创建这个文件 这distutils构建脚本不会修改它 所以五个构建后它仍然是空白的 它的目的是什么 它向 Pytho
  • 了解 CSS 表格单元格和百分比宽度

    我正在检查 Github 如何显示以下菜单 如果您注意到 每个菜单项都具有相同的宽度 在CSS中 我们应该给它任何百分比值 这背后的原因是什么 请注意 父 div 没有给出 display table 属性 div border 1px s
  • Android - 在活动中嵌入 Unity3d 场景 - 需要取消注册接收器?

    我成为 SO 成员已经有一段时间了 但从未真正问过问题 所以这里 My Aim 我正在尝试制作一个包含两个活动的 Android 应用程序 第一个是菜单屏幕 使用标准 Android UI 元素 其中有一个用于打开游戏活动的按钮 游戏活动将
  • 如何获取Android指南针读数?

    既然 SENSOR ORIENTATION 已弃用 那么获取罗盘航向的最佳做法是什么 老方法就是这么简单 以下是获取指南针方向并将其显示在 TextView 中的基本示例 它通过实现 SensorEventListener 接口来实现这一点
  • 更改引导程序中活动类的颜色

    我正在尝试更改 html 代码中活动类的颜色 我正在创建导航侧边栏 这是我的代码 div class col sm 2 ul class nav nav pills nav stacked nav static li class activ
  • javascript:使用 window.open() 发送自定义参数,但它不起作用

  • Android如何使用PriorityQueue读取多个BLE特征

    有点卡在这里 可能需要你的帮助 我想一次读取多个 BLE 特性 有些人建议使用 PriorityQueue 我已经知道所有的 uuid 等 只需要一种方法可以一次读取多个 谁能解释一下它究竟应该是什么样子 或者也许还有另一个更简单的解决方案
  • 谁需要为 BigQuery 查询付费?

    我仍然不清楚谁为我的数据集上的 BigQuery 查询付费 如果我与其他用户共享我的数据集并且其他用户查询它 那么谁为这些查询付费 一年前有一个类似的帖子 但我仍然不确定我是否理解在这种情况下谁付钱 如果您拥有数据集 则需要为该数据集中所有
  • 在 C++ 中解析这个的最好方法是什么?

    在我的程序中 我有以下格式的 服务器地址 列表 host port 这里的括号表示port是可选的 host可以是主机名 IPv4 或 IPv6 地址 可能采用 括号内 表示法 port 如果存在 可以是数字端口号或服务字符串 例如 htt
  • C 中的滚动中值算法

    我目前正在研究一种用 C 语言实现滚动中值滤波器 类似于滚动均值滤波器 的算法 从我对文献的搜索来看 似乎有两种相当有效的方法可以实现 第一种是对初始值窗口进行排序 然后执行二分搜索以插入新值并在每次迭代时删除现有值 第二个 来自 Hard