numpy 滑动窗口取数据

numpy 滑动窗口取数据

import numpy as np
a1 = np.arange(0,10)
print(a1)
[0 1 2 3 4 5 6 7 8 9]

要做成以下形式

在这里插入图片描述

for循环方式(数组大的时候,超级慢)

total_length = a1.shape[0]  # 数组总长度
win_length = 3  # 窗口长度
step_length = 2  # 步长
frequency = (total_length - win_length)//step_length + 1  # 频率
print(frequency)
4
list_arr = []
start_index = 0  # 切片开始下标
for i in range(frequency):
    stop_index = start_index + win_length  # 切片结束下标
    a2 = a1[start_index:stop_index]  # 切片数组
    start_index += step_length  # 下一次切片开始下标
    a2 = np.expand_dims(a2, axis=0)  # 维度增加一维
    list_arr.append(a2)  # 追加进列表
print(list_arr)
[array([[0, 1, 2]]), array([[2, 3, 4]]), array([[4, 5, 6]]), array([[6, 7, 8]])]
slide_arr = np.concatenate(list_arr, axis=0)  # 滑动窗口后的数组
print(slide_arr)
[[0 1 2]
 [2 3 4]
 [4 5 6]
 [6 7 8]]

numpy的方式(numpy的版本要在1.20.0及以上)

print(a1)
[0 1 2 3 4 5 6 7 8 9]
strides = (1, step_length)
# 步长为1步的滑动窗口
slide_arr1 = np.lib.stride_tricks.sliding_window_view(
    a1,  # 原数组
    3  # 窗口大小,也可以是元组,如(2,2)
)
print(slide_arr1)
[[0 1 2]
 [1 2 3]
 [2 3 4]
 [3 4 5]
 [4 5 6]
 [5 6 7]
 [6 7 8]
 [7 8 9]]
slide_arr2 = slide_arr1[::2,] # 步长为2步的滑动窗口
print(slide_arr2)
[[0 1 2]
 [2 3 4]
 [4 5 6]
 [6 7 8]]
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python中,可以使用numpy库来实现滑动窗口数据的操作。首先,需要导入numpy库,并创建一个数组。然后,可以使用numpy滑动窗口函数来滑动窗口数据。这个函数需要指定窗口大小和步长,以及要滑动窗口的数组。接下来,可以使用for循环遍历滑动窗口的结果,进行相应的操作。下面是一个示例代码: import numpy as np # 创建一个数组 a1 = np.arange(0, 10) print(a1) # [0 1 2 3 4 5 6 7 8 9] # 滑动窗口数据 def sliding_window(data, window_size, step): windows = [] for i in range(0, len(data) - window_size + 1, step): window = data[i:i+window_size] windows.append(window) return windows # 示例调用 window_size = 3 step = 1 windows = sliding_window(a1, window_size, step) print(windows) 这个示例代码展示了如何使用numpy库来实现滑动窗口数据的操作。通过定义一个滑动窗口函数,可以传入要滑动窗口的数组、窗口大小和步长,然后使用for循环遍历滑动窗口的结果,并将结果存储在一个列表中。最后,可以打印滑动窗口的结果,以便进一步处理数据。这样,在处理大数据集时,可以更高效地读数据并进行相应的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [numpy 滑动窗口数据](https://blog.csdn.net/weixin_44493841/article/details/122731886)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [python滑动窗口处理时序数据](https://blog.csdn.net/weixin_43536181/article/details/103703590)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏华东的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值