【问题标题】:the max value of every 5 elements in one array with arbitrary length, python3一个任意长度的数组中每5个元素的最大值,python3
【发布时间】:2017-02-19 18:43:56
【问题描述】:

我有一个一维数组。我想计算每 5 个元素的最大值。困难的部分是数组的长度可以是任意值,可以是 5 的倍数,也可以不是。

例如

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

第一个5个元素是0到4,所以最大值是4;第 2 个 5 元素是 5 到 9,所以最大值是 9;最后一部分只有 3 个数字,10 到 12,最大值为 12。 预期结果将是

result = [4, 9, 12]

请注意,这个特定示例有 13 个数字,但实际上它可以是任何其他值。

我的第一个想法是,当恰好是 5 个数字的倍数(N*5)时,我可以将 arr 重塑为二维数组(N 行 5 列),然后使用 np.amax 得到每行的最大值。例如,假设 N = 4

arr = np.arange(20)
arr = arr.reshape(arr.shape[0]/5, 5)
b = np.amax(arr, axis=1)

但困难的是数组的长度不能是 5 的倍数。

如何有效地做到这一点?谢谢?

顺便说一句,我使用的是 Python 3。

【问题讨论】:

    标签: arrays python-3.x max


    【解决方案1】:

    你可以这样做:

    result = [max(arr[i:i+5]) for i in range(0, len(arr), 5)]
    

    【讨论】:

    • 可能值得将此作品添加到任意长度的列表/数组中,因为切片符号不会引发 IndexError。
    【解决方案2】:

    您可以先对列表进行切片,使第二个列表的长度介于 0 和 len(original_list) - 1 之间(使用模数,如 a[-(len(a) % 5):]),然后取第二个列表的最大值,并附加它到第一个列表(您得到的类似于a[:len(a) - (len(a) % 5)])的结果(这是您从上面建议的方法中获得的最大值列表)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      • 1970-01-01
      相关资源
      最近更新 更多