python - 查找(并记录)numpy 数组切片的最大值

标签 python arrays numpy max

给定一个 numpy 数组,例如 a = [0, 3, 2, 4, 0, 2, 3, 1, 1, 6, 2],有没有一种简单的方法来记录每 3 个值的最大值?数组的长度不能是 3 的倍数。在这种情况下,结果应该是 b = [3, 4, 3, 6]

我想到了一些类似的东西

b = [max(a[k:k+3]) for k in range(0, len(a), 3)

但它没有考虑最后一个 3 的倍数之后的值(它应该考虑)。

我还考虑过重新排列 numpy 数组,使其具有 3*n 行,并使用 numpy 模块沿适当的轴取最大值,但是,同样,我不确定如何处理这些值在最后一个 3 的倍数之后。

最佳答案

方法 #1

我们可以使用np.ufunc.reduceat用于执行此类分组/间隔缩减操作。因此,要在每个区间内获得 maximum 值,我们将有 -

W = 3 # group width
np.maximum.reduceat(a,np.r_[:len(a):W])

sample 运行-

In [166]: a
Out[166]: array([0, 3, 2, 4, 0, 2, 3, 1, 1, 6, 2])

In [167]: W = 3

In [168]: np.maximum.reduceat(a,np.r_[:len(a):W])
Out[168]: array([3, 4, 3, 6])

方法 #2

这是另一个切片 -

def max_interval_slice(a, W=3):
    n = len(a)//W
    max0 = a[:n*W].reshape(-1,W).max(1)
    if n*W==len(a):
        return max0
    else:
        return np.r_[max0, np.max(a[n*W:])]

样本运行-

# Input array of length NOT multiple of width=3
In [99]: a
Out[99]: array([0, 3, 2, 4, 0, 2, 3, 1, 1, 6, 2])

In [100]: max_interval_slice(a, W=3)
Out[100]: array([3, 4, 3, 6])

# Input array of length multiple of width=3
In [95]: a = a[:9]

In [96]: max_interval_slice(a, W=3)
Out[96]: array([3, 4, 3])

关于python - 查找(并记录)numpy 数组切片的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272894/

相关文章:

java - 将字符串转换为 Sha-256 哈希值

java - 读取文本文件并创建一个二维数组

python - Numpy 因 python-dbg( undefined symbol : Py_InitModule4_64)

numpy - 训练模型时发生不兼容行维度的值错误

python - 从 python 包中访问数据文件

jquery - 如何使用 angularjs 删除对象中的 [

Python-获取列表中少数类的百分比

python - 如何检查 numpy 数组列表是否包含给定的测试数组?

python - 如何将 Apache Flink DataSet python API 与 IDE 结合使用,例如Windows 10 上的 PyCharm?

python - 在Python中快速解析页面外的链接