多个图像的每个通道的平均值

时间:2017-11-05 16:55:04

标签: python arrays numpy

我想通过存储在numpy数组中的所有数据集计算每个RGB通道的平均值。我知道它完成了np.mean,我知道它的基本用法。

np.mean(arr, axis=(??))

但由于阵列有4个维度,我在设置正确的轴时有点丢失。我发现的所有例子都只涉及1-D或2-D阵列。那么函数调用应该如何看起来像一个数组,例如(1000, 512, 512, 3)

1 个答案:

答案 0 :(得分:2)

对于通用的ndarray,您可以创建一个元组来覆盖除了与颜色通道对应的最后一个轴之外的所有轴,然后将其用于axis param与np.mean,如此 -

np.mean(a, axis=tuple(range(a.ndim-1)))

运行示例以验证循环理解版本 -

In [141]: np.random.seed(0)

In [142]: a = np.random.rand(4,5,6,7,3)

In [143]: [a[...,i].mean() for i in range(a.shape[-1])]
Out[143]: [0.50479333735828591, 0.49485716677174307, 0.51110772176772712]

In [144]: np.mean(a, axis=tuple(range(a.ndim-1)))
Out[144]: array([ 0.50479334,  0.49485717,  0.51110772])

或者,我们可以重塑为2D并沿第一轴找到mean -

In [145]: a.reshape(-1,a.shape[-1]).mean(0)
Out[145]: array([ 0.50479334,  0.49485717,  0.51110772])