0

0

高效生成滚动子序列 DataFrame:使用 NumPy 滑动窗口加速计算

聖光之護

聖光之護

发布时间:2026-02-11 16:53:08

|

287人浏览过

|

来源于php中文网

原创

高效生成滚动子序列 DataFrame:使用 NumPy 滑动窗口加速计算

本文介绍如何利用 numpy.lib.stride_tricks.sliding_window_view 高效构建滚动窗口 dataframe,替代低效循环,在 10 万行数据上提速超 400 倍,兼顾内存友好性与代码简洁性。

在时间序列分析、特征工程或滑动统计建模中,常需将一列数据(如传感器读数、股价序列)转换为多个长度固定的滚动子序列,并组织成二维结构(如 DataFrame)。例如,对长度为 1000 的序列以窗口大小 5 进行滑动,应得到 996 个长度为 5 的子序列,最终构成形状为 (5, 996) 的矩阵——每列代表一个起始位置的窗口,每行对应窗口内偏移量(即 col0 是各窗口首元素,col1 是次元素,依此类推)。

传统做法(如嵌套 for 循环 + iloc)虽逻辑直观,但时间复杂度为 O(n×w),在 n=20,000 时耗时近 10 分钟,完全不可扩展。根本瓶颈在于频繁的 Python 层索引开销与内存拷贝。

推荐方案:零拷贝滑动视图 + 向量化转置
NumPy 1.20+ 提供的 sliding_window_view 可创建内存共享的滑动视图——不复制原始数据,仅通过调整 strides 和 shape 实现“虚拟”窗口,近乎常数时间开销。配合 .T 转置,即可自然对齐目标格式(行=窗口,列=时间步):

import pandas as pd
import numpy as np
from numpy.lib.stride_tricks import sliding_window_view as swv

# 构造示例数据(1000 行)
N = 1000
df = pd.DataFrame({'col0': range(1, N + 1)})

# ✅ 高效生成滚动子序列 DataFrame(窗口大小=5)
window_size = 5
rolling_array = swv(df['col0'], window_shape=window_size)  # 形状: (996, 5)
result_df = pd.DataFrame(rolling_array.T).add_prefix('col')  # 转置后: (5, 996) → 列命名 col0~col995

print(result_df.head())
#    col0  col1  col2  col3  col4  col5  ...  col990  col991  col992  col993  col994  col995
# 0     1     2     3     4     5     6  ...     991     992     993     994     995     996
# 1     2     3     4     5     6     7  ...     992     993     994     995     996     997
# 2     3     4     5     6     7     8  ...     993     994     995     996     997     998
# 3     4     5     6     7     8     9  ...     994     995     996     997     998     999
# 4     5     6     7     8     9    10  ...     995     996     997     998     999    1000

性能对比(n=100,000)

MediSearch
MediSearch

Medisearch是一个AI驱动的医疗健康搜索引擎,旨在根据可信来源提供医学问题的直接答案

下载
  • 循环实现:≈ 10,000 ms(10 秒级)
  • sliding_window_view:≈ 25 ms(提升 400×),且内存占用恒定(视图无拷贝)

关键注意事项

  • 兼容性:需 NumPy ≥ 1.20;旧版本可用 np.lib.stride_tricks.as_strided(需手动计算 strides,易出错,不推荐)。
  • ⚠️ 只读语义:sliding_window_view 返回只读数组,若需修改结果,请显式调用 .copy()。
  • ? 输出维度:输入长度 n、窗口大小 w → 输出列数为 n - w + 1,行数恒为 w。
  • ? 多列扩展:若需对多列同时滚动,先 swv(df.values, w) 再按需重塑(注意 axis 顺序),但需确保列间对齐逻辑一致。

该方法将滚动窗口从“计算密集型任务”降维为“元数据操作”,是 Pandas 用户处理大规模滑动特征的首选实践。结合后续向量化操作(如 df.mean(axis=0) 计算每窗口均值),可构建端到端高性能流水线。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

73

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

4

2026.01.31

传感器故障解决方法
传感器故障解决方法

传感器故障排除指南:识别故障症状(如误读或错误代码)。检查电源和连接(确保连接牢固,无损坏)。校准传感器(遵循制造商说明)。诊断内部故障(目视检查、信号测试、环境影响评估)。更换传感器(选择相同规格,遵循安装说明)。验证修复(检查信号准确性,监测异常行为)。

480

2024.06.04

2026春节习俗大全
2026春节习俗大全

本专题整合了2026春节习俗大全,阅读专题下面的文章了解更多详细内容。

43

2026.02.11

Yandex网页版官方入口使用指南_国际版与俄罗斯版访问方法解析
Yandex网页版官方入口使用指南_国际版与俄罗斯版访问方法解析

本专题全面整理了Yandex搜索引擎的官方入口信息,涵盖国际版与俄罗斯版官网访问方式、网页版直达入口及免登录使用说明,帮助用户快速、安全地进入Yandex官网,高效使用其搜索与相关服务。

107

2026.02.11

虫虫漫画网页版入口与免费阅读指南_正版漫画全集在线查看方法
虫虫漫画网页版入口与免费阅读指南_正版漫画全集在线查看方法

本专题系统整理了虫虫漫画官网及网页版最新入口,涵盖免登录观看、正版漫画全集在线阅读方式,并汇总稳定可用的访问渠道,帮助用户快速找到虫虫漫画官方页面,轻松在线阅读各类热门漫画内容。

27

2026.02.11

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

4

2026.02.11

Rust异步编程与Tokio运行时实战
Rust异步编程与Tokio运行时实战

本专题聚焦 Rust 语言的异步编程模型,深入讲解 async/await 机制与 Tokio 运行时的核心原理。内容包括异步任务调度、Future 执行模型、并发安全、网络 IO 编程以及高并发场景下的性能优化。通过实战示例,帮助开发者使用 Rust 构建高性能、低延迟的后端服务与网络应用。

1

2026.02.11

Spring Boot企业级开发与MyBatis Plus实战
Spring Boot企业级开发与MyBatis Plus实战

本专题面向 Java 后端开发者,系统讲解如何基于 Spring Boot 与 MyBatis Plus 构建高效、规范的企业级应用。内容涵盖项目架构设计、数据访问层封装、通用 CRUD 实现、分页与条件查询、代码生成器以及常见性能优化方案。通过完整实战案例,帮助开发者提升后端开发效率,减少重复代码,快速交付稳定可维护的业务系统。

5

2026.02.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号