You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Numpy数组按固定长度区间求和?

简便实现Numpy数组固定区间求和的方法

这问题我太熟了!日常处理这种按固定长度分组求和的需求,用numpy原生操作就能轻松搞定,完全不用写循环,效率还高。

方法一:Reshape + 按行求和(最直观简便)

当你的数组长度刚好能被n整除时(比如你的例子里数组长度12,n=3或4都能整除),直接用reshape把数组转换成二维数组,再对每一行求和就行:

import numpy as np

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

# 核心代码:reshape成(-1, n)表示自动计算行数,每行n个元素
result = a.reshape(-1, n).sum(axis=1)
print(result)  # 输出:[ 6 15 24 33]

如果n=4的话,只需要修改n的值:

n = 4
result = a.reshape(-1, n).sum(axis=1)
print(result)  # 输出:[10 26 42]

处理数组长度不能被n整除的情况

如果你的数组长度不是n的整数倍,比如a = np.array([1,2,3,4,5,6,7]),n=3,你可以选择两种处理方式:

  • 丢弃剩余不足n个的元素:
trimmed_len = (len(a) // n) * n  # 计算能被n整除的最大长度
result = a[:trimmed_len].reshape(-1, n).sum(axis=1)
print(result)  # 输出:[6 15]
  • 保留剩余元素并单独求和:
trimmed_len = (len(a) // n) * n
result = a[:trimmed_len].reshape(-1, n).sum(axis=1)
# 加上剩余元素的和
if len(a) % n != 0:
    result = np.append(result, a[trimmed_len:].sum())
print(result)  # 输出:[6 15 7]

方法二:累积和(cumsum)+ 差值计算

另一种灵活的思路是先计算数组的累积和,再通过取间隔n的元素做差值得到每组的和:

cumsum_a = np.cumsum(a)
# 取每组最后一个元素的累积和,减去前一组最后一个元素的累积和(第一个组减0)
result = cumsum_a[n-1::n] - np.concatenate([[0], cumsum_a[:-n:n]])
print(result)  # 输出:[ 6 15 24 33]

这个方法的原理是:累积和数组中,第k*n-1位置的元素是前k组的总和,减去前(k-1)组的总和,就得到第k组的单独和。


内容的提问来源于stack exchange,提问作者Sebastian Dengler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:19:18