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

使用Numpy计算不规则维度数组的三级列求和问题

Numpy处理不规则多维数组的层级列求和问题

问题场景

当处理规则形状的多维数组时,使用np_array.sum(axis=0)可以轻松计算第三层级的每列之和:

import numpy as np

score_list = [
    [[1,1,3], [1,2,5]],
    [[2,7,5], [4,1,3]]
]
np_array = np.array(score_list)
sum_array = np_array.sum(axis=0)
print(sum_array)

输出结果为:

[[3 8 8]
 [5 3 8]]

但遇到不规则形状数组时,numpy的sum(axis=0)无法得到预期结果:

score_list = [
    [[1,1], [1,2,5]],
    [[2,7], [4,1,3]]
]
np_array = np.array(score_list)
sum_array = np_array.sum(axis=0)
print(sum_array)

实际返回:

[list([1, 1, 2, 7]) list([1, 2, 5, 4, 1, 3])]

并伴随警告,无法得到预期的[[3 8] [5 3 8]]。

解决方案

由于不规则数组在numpy中会被识别为object类型,原生的sum(axis=0)会直接拼接同位置元素而非按列求和。可以通过手动遍历对应层级的子数组,按列逐个求和来实现需求:

import numpy as np

score_list = [
    [[1,1], [1,2,5]],
    [[2,7], [4,1,3]]
]

# 遍历第二层级的每个位置,收集对应子数组并按列求和
result = []
for idx in range(len(score_list[0])):
    # 获取所有第一层级中第idx位置的子数组
    sub_arrays = [layer[idx] for layer in score_list]
    # 用zip打包同列元素,再计算每列的和
    column_sums = [sum(col_elements) for col_elements in zip(*sub_arrays)]
    result.append(column_sums)

# 转换为numpy数组(可选,若需保持numpy格式)
result_np = np.array(result, dtype=object)
print(result_np)

运行后输出:

[[3 8] [5 3 8]]

原理说明

  • 通过[layer[idx] for layer in score_list]收集所有第一层级中对应第二层级位置的子数组,比如第一个循环中收集到[[1,1], [2,7]],第二个循环收集到[[1,2,5], [4,1,3]]。
  • zip(*sub_arrays)会将子数组的同列元素打包成元组,比如zip(*[[1,1], [2,7]])得到(1,2)和(1,7),再对每个元组求和即可得到列总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:20:32