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

如何在Python中对三维numpy数组的同位置子数组求和

解决方案

针对你提出的三维numpy数组求和需求,这里提供几种高效的实现方式:

方法1:分步使用numpy的sum函数

利用numpy的轴求和特性,先合并三个二维数组对应位置的元素,再对子数组内部求和:

import numpy as np

# 构造输入数组
arr = np.array([[[1, 1, 1],
                 [2, 2, 2],
                 [3, 3, 3],
                 [4, 4, 4],
                 [5, 5, 5]],

                [[1, 1, 1],
                 [2, 2, 2],
                 [3, 3, 3],
                 [4, 4, 4],
                 [5, 5, 5]],

                [[1, 1, 1],
                 [2, 2, 2],
                 [3, 3, 3],
                 [4, 4, 4],
                 [5, 5, 5]]])

# 先沿轴0合并三个二维数组的对应元素,再沿轴1对子数组求和
result = arr.sum(axis=0).sum(axis=1).tolist()
print(result)  # 输出: [9, 18, 27, 36, 45]

方法2:一次性指定多轴求和(更简洁)

直接通过指定多个求和轴,一步完成计算:

result = arr.sum(axis=(0, 1)).tolist()
print(result)  # 输出: [9, 18, 27, 36, 45]

原理说明

  • axis=0:将三个二维数组中对应位置的元素相加,得到形状为(5, 3)的数组,每个子数组变为[3,3,3]、[6,6,6]等;
  • axis=1:对每个子数组内部的元素求和,最终得到长度为5的结果数组;
  • tolist():将numpy数组转换为普通Python列表。

方法3:纯Python列表循环实现(适合小数据量)

如果不想依赖numpy,也可以用原生Python循环完成:

arr_list = arr.tolist()
result = []

# 遍历每个子数组的位置
for idx in range(len(arr_list[0])):
    total = 0
    # 累加三个二维数组中对应子数组的和
    for sub_arr in arr_list:
        total += sum(sub_arr[idx])
    result.append(total)

print(result)  # 输出: [9, 18, 27, 36, 45]

注意事项

当数组规模较大时,优先使用numpy的方法,其底层基于C实现,效率远高于纯Python循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:20:26