如何通过将3D数组中的每个值相加来返回2D数组

时间:2018-07-18 19:44:25

标签: multidimensional-array

我正在使用Python处理3D列表。我正在尝试沿z轴求和每个值。 我的3D列表:

class cylinderType
{
public:
    cylinderType();
    ~cylinderType();

private:
    circleType baseOfCylinder;
};

但是我有点迷失了:

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]

但这似乎很笨拙,所以我希望有一种更Python化的方式

要弄清期望的结果,将是: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))])

1 个答案:

答案 0 :(得分:0)

感谢您的回答。可以,但是我发现了另一个更清洁的解决方案,需要导入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%。 我还尝试测试Aphton的答案,但这是为python 2.7编写的,并将xrange更改为范围不正确的结果。我还发现它比嵌套循环要慢50%