代码之家  ›  专栏  ›  技术社区  ›  Supamee

如何通过对三维数组中的每个值求和来返回二维数组

  •  0
  • Supamee  · 技术社区  · 6 年前

    我正在用python处理一个3d列表。我试图沿着z轴和每个值求和。 我的3D列表:

    a=[[[11,12,13],[14,15,16],[17,18,19]],
      [[21,22,23],[24,25,26],[27,28,29]],
      [[31,32,33],[34,35,36],[37,38,39]]]
    

    不过,我有点迷失了,因为:

    print(a[:][0][0])
    print(a[0][:][0])
    print(a[0][0][:])
    

    全部返回 [31,32,33]

    我有办法:

    for i in range(len(a[0])):
       for j in range(len(a[0][0])):
          b[i][j]=sum([a[k][i][j] for k in range(len(a))])
    

    但这看起来很笨拙所以我希望有一个更像蟒蛇的方法

    为了澄清预期结果,将: [[63, 66, 69], [72, 75, 78], [81, 84, 87]]

    1 回复  |  直到 6 年前
        1
  •  0
  •   Supamee    6 年前

    谢谢你的回答。这很有效,但我找到了另一个更干净的解决方案,需要导入numpy。

    a=[[[11,12,13],[14,15,16],[17,18,19]],
     [[21,22,23],[24,25,26],[27,28,29]],
     [[31,32,33],[34,35,36],[37,38,39]]]
    
    print(numpy.sum(a, axis=0))
    # prints [[63 66 69] [72 75 78] [81 84 87]]
    

    可转换回具有以下内容的列表:

    numpy.sum(a, axis=0).tolist()
    

    小提示这比问题中的嵌套for循环快30%,即使在转换回list之后也是如此。 我还试图测试Aphton的答案,但这是为Python2.7编写的,并将Xrange更改为range cases错误的结果。我还发现它比嵌套for循环慢了大约50%