Python 对嵌套列表中各numpy array元素分别求和输出结果列表
需求说明
现有嵌套列表distances,内部元素均为numpy数组,需要对每个数组内部元素分别求和,最终返回由各数组求和值组成的一维列表。
给定的distances结构如下:
distances [array([2.0786226e-03, 3.9023757e-03, 3.4480095e-03, 5.1999092e-04], dtype=float32), array([0.0031136 , 0.00344056, 0.00739563, 0.0311079 ], dtype=float32), array([1.8880665e-03, 3.0295253e-03, 4.0802956e-03, 2.6324868e-02], dtype=float32), array([0.00330418, 0.00431347, 0.00802791, 0.00426304], dtype=float32)]
期望输出:
[0.00994899872, 0.04505769, 0.0353227554, 0.0199086]
原有代码问题分析
你编写的代码print(sum( sum(x) if isinstance(x, list) else x for x in L ))存在两个问题:
- 外层的
sum直接包裹了遍历生成器,会把每个元素的计算结果再次累加,最终只能得到单个总加和的标量 - 类型判断逻辑错误:
distances的内部元素是numpy数组而非普通列表,所有元素都会走else分支直接返回数组本身,外层sum会把所有数组的全部元素加总,完全不符合需求。
正确实现方案
方法1:纯numpy数组场景
如果确认distances里所有元素都是numpy数组,直接用列表推导式调用每个数组的内置sum方法即可,性能最优:
result = [arr.sum() for arr in distances] print(result)
方法2:兼容普通列表和numpy数组混合场景
如果列表里可能同时存在普通列表和numpy数组,调整类型判断逻辑即可:
import numpy as np result = [x.sum() if isinstance(x, np.ndarray) else sum(x) for x in distances] print(result)
内容的提问来源于stack exchange,提问作者Khaned
相关产品推荐
相关产品推荐

