我想创建一个数组,其中包含max()
通过给定numpy数组移动的窗口的所有es。很抱歉,这听起来令人困惑。我举一个例子。输入:
[ 6,4,8,7,1,4,3,5,7,2,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2 ]
我的窗口宽度为5的输出应为:
[ 8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,7,7,9,9,9,9 ]
每个数字应为输入数组宽度5的子数组的最大值:
[ 6,4,8,7,1,4,3,5,7,2,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2 ]
\ / \ /
\ / \ /
\ / \ /
\ / \ /
[ 8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,7,7,9,9,9,9 ]
我没有在numpy中找到一个开箱即用的函数来做到这一点(但是如果有一个,我不会感到惊讶;我并不是一直以numpy开发人员的想法来思考)。我考虑过为输入创建偏移的2D版本:
[ [ 6,4,8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1 ]
[ 4,8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9 ]
[ 8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4 ]
[ 7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4,3 ]
[ 1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2 ] ]
然后,我可以np.max(input, 0)
对此进行申请,并得到我的结果。但这对我来说似乎不太有效,因为数组和窗口宽度都可能很大(>
1000000个条目和> 100000个窗口宽度)。数据将因窗口宽度而增加或减少。
我也考虑过np.convolve()
以某种方式使用,但无法找到一种方法来实现我的目标。
任何想法如何有效地做到这一点?
Pandas对Series和DataFrame都有滚动方法,可以在这里使用:
import pandas as pd
lst = [6,4,8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2]
lst1 = pd.Series(lst).rolling(5).max().dropna().tolist()
# [8.0, 8.0, 8.0, 7.0, 7.0, 8.0, 8.0, 8.0, 8.0, 8.0, 6.0, 6.0, 6.0, 6.0, 6.0, 7.0, 7.0, 9.0, 9.0, 9.0, 9.0]
为了保持一致,您可以将的每个元素强制转换lst1
为int
:
[int(x) for x in lst1]
# [8, 8, 8, 7, 7, 8, 8, 8, 8, 8, 6, 6, 6, 6, 6, 7, 7, 9, 9, 9, 9]
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)
一、题目 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。 举例说明 例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小为3,那么一共存在6个滑动窗口,它们的最大值分别为{4,4,6,6,6,5}。 二、解题思路 如果采用蛮力法,这个问题似乎不难解决:可以扫描每一个滑动窗口的所有数字并找出其中的最大值。如果滑动窗口的大小为k,需要O(k)时间才能找出滑动窗口里的最大值
问题内容: 有没有一种方法可以有效地为Numpy中的1D数组实现滚动窗口? 例如,我有这个纯Python代码段来计算一维列表的滚动标准偏差,其中一维值列表和标准偏差的窗口长度: 有没有办法在Numpy内完全做到这一点,即没有任何Python循环?标准偏差对于而言是微不足道的,但是滚动窗口部分完全使我难过。 我发现这个关于numpy的滚动窗口博客文章,但似乎并没有为一维数组。 问题答案: 只需使用博
问题内容: 我在2D数组上恒定大小的移动窗口上执行操作。我可以实现高效的类似于矢量化的操作来执行此操作而无需在Python中循环吗?我目前的结构看起来像这样 这些评论可以 吃 留在这个问题暗指矢量化这种操作这种可能性,但没有进一步的细节矢量索引/切片在numpy的/SciPy的? 问题答案: 如果可以表达功能 作为一个线性算,你可以使用SciPy的的signal.convolve2d函数来做到这一
假设我有一个每1分钟开始的2小时窗口。下一步是应用GroupBy转换。 如果能解释这一点,我将不胜感激。无法真正找到相关信息
问题内容: 我需要一种快速的方法来保持运行最大的numpy数组。例如,如果我的数组是: 我想要: 显然我可以做一个小循环: 但是我的数组有成千上万的条目,我需要多次调用。似乎必须要有一个小技巧才能删除循环,但我似乎找不到任何有效的方法。另一种选择是将其编写为C扩展,但似乎我会重新发明轮子。 问题答案: 为我工作。