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.])