首页 > 解决方案 > 如何生成一个新数组,其中每个元素都是 numpy 1d 数组的局部范围内的最大数

问题描述

我在 numpy 中有一个一维数组。比方说x=np.arange(20)

我想生成一个新数组,每个元素是范围内 x 的最大数量[i:i+4],i=0..15,step=5

在这种情况下,new_array=[x[0:4].max(), x[5:9].max(), x[10:14].max(),x[15:19].max()]=[4,9,14,19]

但我想创建一个可以处理任意范围的宇宙例程。现在我正在使用 forloop 来做到这一点,但是否存在任何捷径?

标签: pythonarraysnumpy

解决方案


如果您不想编写函数,我认为您可以使用列表推导。按照您给出的示例:

new_array = [x[i:i+4].max() for i in range(0, 15+1, 5)]

这将生成 [3, 8, 13, 18],而不是[4, 9, 14, 19]。请记住,切片数组时不考虑上索引。这也是我在 range 函数中放入“15+1”的原因。

使用此方法对任何大小的向量进行概括如下:

new_array = [x[i:i+4].max() for i in range(0, x.size-4, 5)]

推荐阅读