首页 > 解决方案 > 我想在 for 循环中添加所有列表并制作一个 ndarray

问题描述

例如我有一个列表列表

[[1,2,3], [4,5,6], [7,8,9], [10,11,12], ...]

我想在 for 循环中添加所有列表并制作一个 ndarray,

像下面这样

for list in lists:
    sum function...

结果我想要的是

[22, 26, 30]

我怎样才能把它写成一个很好的代码?

标签: pythonnumpynumpy-ndarray

解决方案


如果您使用的是 NumPy,则非常简单:

import numpy as np

l = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
arr = np.array(l)
result = arr.sum(axis=0)
print(result)
# [22 26 30]

对于纯 Python 解决方案:

l = [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
result = [sum(column) for column in zip(*l)]
print(result)
# [22, 26, 30]

NumPy 解决方案会更快。

In [1]: import numpy as np

In [2]: arr = np.arange(10 ** 6).reshape(10 ** 3, 10 ** 3)

In [3]: %timeit arr.sum(axis=0)
881 µs ± 22.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [4]: l = arr.tolist()

In [5]: %timeit [sum(x) for x in zip(*l)]
76.8 ms ± 1.84 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

推荐阅读