For循环在np 3d数组上获得总和和平均值
For loop to obtain sum and mean on np 3d array
我有以下数组
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)
但我确信有一种 Pythonic 的方式可以做到这一点
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]]])
for
在第一个维度上迭代,就好像它是一个数组列表:
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.])
我有以下数组
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)
但我确信有一种 Pythonic 的方式可以做到这一点
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]]])
for
在第一个维度上迭代,就好像它是一个数组列表:
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.])