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

Python中二维数组按列从指定起始位置求和的实现方案

按列自定义起始行求和的解决方案

先把你给出的示例数据再明确一下,方便后续验证:

import numpy as np
a = np.arange(20).reshape(5, 4)
ref = np.array([0, 2, 4, 1])

运行后a的内容是:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]]

ref的每个元素对应每一列的求和起始行索引,比如第1列(索引1)要从行2开始求和,第3列(索引3)从行1开始求和。

方法一:矢量化掩码法(适合大型数组)

这种方法利用numpy的广播机制,全程矢量化操作,效率很高,适合处理大规模数据:

# 生成和a同形状的行索引矩阵
row_indices = np.arange(a.shape[0])[:, np.newaxis]
# 创建掩码:标记哪些行需要参与对应列的求和
mask = row_indices >= ref
# 把不需要的元素置0后按列求和
result = np.where(mask, a, 0).sum(axis=0)

运行后result的输出是:array([40, 39, 18, 52]),完全符合预期:

  • 第0列(起始行0):0+4+8+12+16 = 40
  • 第1列(起始行2):9+13+17 = 39
  • 第2列(起始行4):18 = 18
  • 第3列(起始行1):7+11+15+19 = 52

方法二:列表推导式(直观易懂)

如果你的数组规模不大,用列表推导式会更直观,代码可读性更强:

result = np.array([a[ref[i]:, i].sum() for i in range(a.shape[1])])

这个逻辑很简单:遍历每一列的索引i,对a的第i列从ref[i]行开始切片,然后求和,最后把所有列的结果拼成数组,输出和上面完全一致。

两种方法各有优势,你可以根据自己的数据规模和代码可读性需求来选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:50:49