首页 > 解决方案 > 如何广播列表列表的总和?

问题描述

如何以有效的方式广播列表列表的总和?下面是一个工作代码,但当 list1 具有第 n 个值(如 30 个元素)时效率不高。对此有何改进?从 numpy 导入 sum 导入 numpy 作为 np

list1 = [[4,8],[8,16]]
list2 = [2] 
elemSum=[sum(list1[0]),sum(list1[1])]
print((np.array(elemSum)/np.array(list2)))

印刷:

[ 6. 12.] # expected output

我想要一个像下面这样的单行,消除变量 elemSum 的声明,但它产生不正确的输出,因为它将 2 个元素与 1 相加

print(sum(np.array(list1)/np.array(list2)))

印刷:

18.0 # not expected it sums 2 elements to 1

标签: pythonnumpyarray-broadcasting

解决方案


numpy.sum接受一个可选axis参数,可用于沿单个轴的部分和:

>>> list1 = np.array([[4,8],[8,16]])
>>> list2 = np.array([2])
>>> np.sum(list1)
36
>>> np.sum(list1, axis=1)
array([12, 24])
>>> np.sum(list1, axis=1) / list2
array([ 6., 12.])

推荐阅读