Numpy For循环在np 3d数组上获取求和和和平均值

Numpy For循环在np 3d数组上获取求和和和平均值,numpy,for-loop,list-comprehension,Numpy,For Loop,List Comprehension,我有以下数组 arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) 我想遍历每个元素并在轴0上求和,所以我这样做: lst = [] for x in arr: for y in np.sum(x,axis=0): lst.append(y) 其中现在是lst [5, 7, 9, 17, 19, 21] 但是,我希望输出为以下形式: [[5, 7, 9

我有以下数组

arr = np.array([[[1, 2, 3], [4, 5, 6]], 
                [[7, 8, 9], [10, 11, 12]]])
我想遍历每个元素并在轴0上求和,所以我这样做:

lst = []
for x in arr:
    for y in np.sum(x,axis=0):
        lst.append(y)
其中现在是
lst

[5, 7, 9, 17, 19, 21]
但是,我希望输出为以下形式:

[[5, 7, 9], [17, 19, 21]]
然后取其轴0的平均值,即(5+17)/2,依此类推。最终输出应该如下所示

[11., 13., 15.]
我想知道我该怎么做?是否可以将整个操作以紧凑的形式编写为列表理解

更新:要获得最终输出,我可以执行以下操作:

np.mean(np.reshape(lst, (len(arr),-1)),axis=0) 
然而,我确信有一种蟒蛇式的方法可以做到这一点

In [5]: arr = np.array([[[1, 2, 3], [4, 5, 6]],
   ...:                 [[7, 8, 9], [10, 11, 12]]])
In [7]: arr
Out[7]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])
在第一维上迭代,好像它是一个数组列表:

In [8]: for x in arr:print(x)
[[1 2 3]
 [4 5 6]]
[[ 7  8  9]
 [10 11 12]]
list(arr)
也生成一个列表(但它比'arr.tolist()慢)

迭代其他维度的一种常见方法是使用索引:

In [10]: for i in range(2):print(arr[:,i])
[[1 2 3]
 [7 8 9]]
[[ 4  5  6]
 [10 11 12]]
您还可以将所需的轴放在第一位,以转置阵列

但是您不需要迭代

In [13]: arr.sum(axis=1)
Out[13]: 
array([[ 5,  7,  9],
       [17, 19, 21]])
In [14]: arr.sum(axis=1).mean(axis=0)
Out[14]: array([11., 13., 15.])