numpy数组中部分最大值的pythonic方法

4
我想知道在numpy数组中是否有一种快速计算部分最大值的方法。例如:
a = [1,2,3,4,5,6,7,8,9]

如果我们将部分大小固定为3,我希望答案是:
b = [3,6,9]

其中3是a的第一部分[1,2,3]的最大值,6是第二部分[4,5,6]的最大值,以此类推。


分区的大小是否总是相同的? - Alex Riley
2个回答

3
如果您有一个numpy数组,您可以将其重塑为行长度作为部分大小,现在您有一个2D矩阵,您可以执行行/列最大值。
编辑1:接受ajcr的评论并将其添加到代码中。
import numpy as np

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
a = a.reshape((-1, 3))
print a.max(1)

输出:

[ 3  6  9 12]

非常感谢您,@Franchi。 - Alan_AI

3

尝试重塑后,再取最大值:

import numpy as np

a = np.array([1,2,3,4,5,6,7,8,9])
>>> a.reshape((len(a) / 3, 3)).max(axis=1)
array([3, 6, 9])

如果数组的长度不能被该数字整除,那么在这种情况下你需要更明确地说明你的意思。 修改:@ajcr 在下面的评论中展示了一种更好的重塑方式。
>>> a.reshape((-1, 3)).max(axis=1)

你的答案是正确的,但是除以3应该在形状的第一个元素中,或者更改max函数使用axis=0。 - Fanchi
1
你也可以直接写-1,而不是len(a) / 3(如果你使用的是Python 3,NumPy会抱怨给reshape的浮点数)。 - Alex Riley
@ajcr 非常感谢!我不知道这个。我会更新的。 - Ami Tavory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接