【问题标题】:Summing up all elements in a list of 2D arrays总结二维数组列表中的所有元素
【发布时间】:2014-01-22 15:31:54
【问题描述】:

我有一个列表 QS n 个二维数组。现在我想总结列表中的所有数组,这样我就得到了另一个二维数组。到目前为止,我是手动完成的,因为我的列表元素数量很少,例如:

n=6    
QM=QS[0]+QS[1]+QS[2]+QS[3]+QS[4]+QS[5]

但现在我需要考虑列表中的更多元素,并且我正在寻找一种更 Pythonic 的方式来做到这一点。我尝试了以下方法:

QQ=map(sum, zip(QS))

但它给了我原始列表中数组元素总和的列表,而不是数组本身的总和。 一定有一个简单的方法可以做到这一点,我只是还没有弄清楚。有什么建议吗?

【问题讨论】:

  • 请提供一些示例输入/输出数据,不清楚您到底在寻找什么。
  • 会对map的结果求和会得到你想要的结果吗?不完全确定你在问什么。
  • 如果我们考虑形状可能会很清楚:QS 是一个包含 6 个形状为 64x16 的数组的列表:np.shape(QS)=>(6,64,16) 我想要的是 QS 中 6 个数组的总和:np.shape(QQ)=>(64,16)跨度>

标签: python arrays numpy


【解决方案1】:

我觉得你可以用np.sum,IIUC:

>>> import numpy as np
>>> QS = [np.random.randint(0, 10, (3,3)) for i in range(6)]
>>> QM = QS[0]+QS[1]+QS[2]+QS[3]+QS[4]+QS[5]
>>> QM
array([[36, 32, 32],
       [34, 28, 30],
       [28, 28, 32]])
>>> QM2 = np.sum(QS,axis=0)
>>> QM2
array([[36, 32, 32],
       [34, 28, 30],
       [28, 28, 32]])
>>> np.allclose(QM, QM2)
True

【讨论】:

    【解决方案2】:

    这相当于将带有+ 的列表放在它们之间:

    QM = []
    map(lambda l: QM.extend(l), QS)
    

    没有地图:

    for l in QS:
        QM.extend(l)
    

    或者简单地说:

    for l in QS:
        QM += l
    

    【讨论】:

    • 不要使用 map 或列出对副作用的理解。
    【解决方案3】:

    没有你的数组,很难看出究竟什么会起作用。但是尝试这样的事情来总结一个数组数组(列表列表):

    sum([sum(i) for i in zip(*QS)])
    

    Related

    【讨论】:

      【解决方案4】:

      如果您想将 2D 列表转换为 1D,请尝试以下操作:

      >>> a = [[1,2], [3,4], [5,6]]
      >>> sum(a, [])
      [1, 2, 3, 4, 5, 6]
      >>>
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 2017-03-20
      • 2020-05-03
      • 1970-01-01
      相关资源
      最近更新 更多