【发布时间】:2017-09-03 10:52:52
【问题描述】:
我想创建一个数组,该数组包含在给定 numpy 数组中移动的窗口的所有 max()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(),但无法找到实现目标的方法。
任何想法如何有效地做到这一点?
【问题讨论】:
标签: python performance numpy scipy max