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

Numpy中一维数组的滚动窗口?

谷梁建中
2023-03-14
问题内容

有没有一种方法可以有效地为Numpy中的1D数组实现滚动窗口?

例如,我有这个纯Python代码段来计算一维列表的滚动标准偏差,其中observations一维值列表和n标准偏差的窗口长度:

stdev = []
for i, data in enumerate(observations[n-1:]):
    strip = observations[i:i+n]
    mean = sum(strip) / n
    stdev.append(sqrt(250*sum([(s-mean)**2 for s in strip])/(n-1)))

有没有办法在Numpy内完全做到这一点,即没有任何Python循环?标准偏差对于而言是微不足道的numpy.std,但是滚动窗口部分完全使我难过。

我发现这个关于numpy的滚动窗口博客文章,但似乎并没有为一维数组。


问题答案:

只需使用博客代码,然后将功能应用于结果即可。

numpy.std(rolling_window(observations, n), 1)

您所在的位置(来自博客):

def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)


 类似资料:
  • 问题内容: 我在2D数组上恒定大小的移动窗口上执行操作。我可以实现高效的类似于矢量化的操作来执行此操作而无需在Python中循环吗?我目前的结构看起来像这样 这些评论可以 吃 留在这个问题暗指矢量化这种操作这种可能性,但没有进一步的细节矢量索引/切片在numpy的/SciPy的? 问题答案: 如果可以表达功能 作为一个线性算,你可以使用SciPy的的signal.convolve2d函数来做到这一

  • 问题内容: 我使用Python和NumPy,“移调”有一些问题: 调用不转置数组。例如,如果为,则它正确转置,但我需要的转置。 问题答案: 它的工作完全符合预期。一 维 数组的转置仍然是 一维 数组!(如果您习惯使用matlab,从根本上来说就没有1D数组的概念。Matlab的“ 1D”数组是2D。) 如果要将一维矢量转换为二维数组然后转置,只需对其进行切片(或者,它们是相同的,可读性更高)。 一

  • 问题内容: 我想创建一个数组,其中包含通过给定numpy数组移动的窗口的所有es。很抱歉,这听起来令人困惑。我举一个例子。输入: 我的窗口宽度为5的输出应为: 每个数字应为输入数组宽度5的子数组的最大值: 我没有在numpy中找到一个开箱即用的函数来做到这一点(但是如果有一个,我不会感到惊讶;我并不是一直以numpy开发人员的想法来思考)。我考虑过为输入创建偏移的2D版本: 然后,我可以对此进行申

  • 问题内容: 我想通过指定2D数组中的列数将一维数组转换为二维数组。可能会像这样工作: numpy是否具有与我的虚构函数“ vec2matrix”相似的功能?(我知道您可以像2D数组一样索引1D数组,但这不是我拥有的代码中的选项- 我需要进行此转换。) 问题答案: 您要阵列。 其中,根据输入数组的大小推断新维的大小。

  • 问题内容: 我有一个很大的数组,其中每一行都是一个时间序列,因此需要保持秩序。 我想为每行选择一个给定大小的随机窗口。 在我看来,理想的解决方案是: 但不幸的是,这不起作用 我现在要进行的操作非常慢: 当然,我可以对列表进行理解(并获得最小的速度提升),但是我想知道是否有某种超级聪明的numpy向量化方​​法可以做到这一点。 问题答案: 这是一种杠杆作用- 在具有行的更大数组上进行运行时测试-

  • 问题内容: 背景 我有一个零初始化的一维NumPy数组。 然后我有一个Pandas DataFrame,其中两列都有索引: 对于每对索引,我想将numpy数组中相应索引的值设置为True。 我目前的解决方案 我可以通过将一个函数应用于DataFrame来做到这一点: 我想向量化此操作 这可以按我期望的方式工作,但是出于乐趣,我想对操作进行矢量化处理。我对此不是很熟练,而且我在网上搜索并没有使我走上