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

时间:2019-03-20 01:28:25

标签: python numpy numpy-ndarray

例如 我有一个清单清单

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

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

喜欢跟随

for list in lists:
    sum function...

结果就是我想要的

[22, 26, 30]

我如何用漂亮的代码编写它?

2 个答案:

答案 0 :(得分:1)

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

\p{Lu}

对于纯Python解决方案:

(?=...

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]

答案 1 :(得分:0)

您只需使用python的基本知识就可以做到这一点而无需Numpy。 (所有子列表的长度必须相同)

l =  [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
result = [sum(subL[i] for subL in l) for i in range(len(l[0]))]

或者,没有列表理解:

result = []
for i in range(len(l[0])):
    n = 0
    for x in l:
        n += subL[i]
    result.append(n)

两者都产生输出[22, 26, 30]

如果您对性能感兴趣,我会写这个(不确定它是否正确):

from timeit import timeit
import numpy as np

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

def listComprehension():
    result = [sum(subL[i] for subL in l) for i in range(len(l[0]))]

def basic():
    result = []
    for i in range(len(l[0])):
        n = 0
        for subL in l:
            n += subL[i]
        result.append(n)

def zipped():
    result = [sum(column) for column in zip(*l)]

def numpyied():
    arr = np.array(l)
    result = arr.sum(axis=0)

print(timeit("listComprehension()", setup = "from __main__ import listComprehension"))
# 3.738487364
print(timeit("basic()", setup = "from __main__ import basic"))
# 1.953782115
print(timeit("zipped()", setup = "from __main__ import zipped"))
# 1.413262091
print(timeit("numpyied()", setup = "from __main__ import numpyied"))
# 9.576366059999998

令人惊讶的是numpy慢一些,但我不能说为什么。 (后两个功能取自@Tomothy32's answer