当前位置: 首页 > 面试题库 >

M乘N形状的滑动窗口numpy.ndarray

单于经纬
2023-03-14
问题内容

我有一个形状为(6,2)的numpy数组

[[00,01],
 [10,11],
 [20,21],
 [30,31],
 [40,41],
 [50,51]]

我需要一个步长为1且窗口大小为3的滑动窗口,如下所示:

[[00,01,10,11,20,21],
 [10,11,20,21,30,31],
 [20,21,30,31,40,41],
 [30,31,40,41,50,51]]

我正在寻找一种解决方案。如果您的解决方案可以参数化原始数组的形状以及窗口大小和步长大小,那就太好了。


问题答案:

In [1]: import numpy as np

In [2]: a = np.array([[00,01], [10,11], [20,21], [30,31], [40,41], [50,51]])

In [3]: w = np.hstack((a[:-2],a[1:-1],a[2:]))

In [4]: w
Out[4]: 
array([[ 0,  1, 10, 11, 20, 21],
       [10, 11, 20, 21, 30, 31],
       [20, 21, 30, 31, 40, 41],
       [30, 31, 40, 41, 50, 51]])

您可以这样写:

def window_stack(a, stepsize=1, width=3):
    n = a.shape[0]
    return np.hstack( a[i:1+n+i-width:stepsize] for i in range(0,width) )

只要,这实际上并不取决于原始数组的形状a.ndim = 2。请注意,在交互式版本中,我从不使用任何长度。形状的第二维无关紧要;每行可以根据需要设置。感谢@Jaime的建议,您完全不需要检查形状就可以做到:

def window_stack(a, stepsize=1, width=3):
    return np.hstack( a[i:1+i-width or None:stepsize] for i in range(0,width) )


 类似资料:
  • 假设我有一个每1分钟开始的2小时窗口。下一步是应用GroupBy转换。 如果能解释这一点,我将不胜感激。无法真正找到相关信息

  • 介绍 将TCP与UDP这样的简单传输协议区分开来的是它传输数据的质量。TCP对于发送数据进行跟踪,这种数据管理需要协议有以下两大关键功能: 可靠性:保证数据确实到达目的地。如果未到达,能够发现并重传。 数据流控:管理数据的发送速率,以使接收设备不致于过载。 要完成这些任务,整个协议操作是围绕滑动窗口确认机制来进行的。因此,理解了滑动窗口,也就是理解了TCP。 更多信息 TCP面向流的滑动窗口确认机

  • NowCoder 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。 例如,如果输入数组 {2, 3, 4, 2, 6, 2, 5, 1} 及滑动窗口的大小 3,那么一共存在 6 个滑动窗口,他们的最大值分别为 {4, 4, 6, 6, 6, 5}。 解题思路 // java public ArrayList maxInWindows(int[] num, int size)

  • 我正在用C#开发一个窗口表单,使用数据库中的数据构建一个树视图。有一个存储过程,给出以下信息的列表 id-节点id描述-树视图中显示的值是EndNode-0,如果它是结束节点;1,如果这个节点有孩子 如果isEndNode为1,那么我必须使用当前节点的id调用相同的存储过程,以接收其下的子节点列表。 我已经建立了一个机制来调用存储过程并获取项目列表,但我不确定如何填充树结构。我想我会将第一个列表显

  • 实现滑动窗口我写了这样的: 执行此代码将打印: 我正在尝试修改,以便每个窗口之间没有重叠,这样大小为3的滑动窗口将返回: 我想我需要修改<code>start</code>,使其指向下一个窗口,但我不确定如何使用流来实现这一点。

  • 一、题目 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。 举例说明 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小为3,那么一共存在6个滑动窗口,它们的最大值分别为{4,4,6,6,6,5}。 二、解题思路 如果采用蛮力法,这个问题似乎不难解决:可以扫描每一个滑动窗口的所有数字并找出其中的最大值。如果滑动窗口的大小为k,需要O(k)时间才能找出滑动窗口里的最大值