我想通过存储在 numpy 数组中的所有数据集计算每个 RGB channel 的平均值。我知道它是用 np.mean
完成的,并且我知道它的基本用法。
np.mean(arr, axis=(??))
但是由于数组有 4 个维度,我在设置正确的轴时有点迷失。我发现的所有示例都只处理一维或二维数组。
那么函数调用应该如何看起来像有一个数组,例如(1000, 512, 512, 3)
?
最佳答案
对于通用 ndarray,您可以创建一个元组来覆盖除与颜色 channel 对应的最后一个轴之外的所有轴,然后将其用于 axis
参数为 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])
或者,我们可以 reshape 为 2D
并找到mean
沿第一轴 -
In [145]: a.reshape(-1,a.shape[-1]).mean(0)
Out[145]: array([ 0.50479334, 0.49485717, 0.51110772])
关于python - 多幅图像各 channel 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47124143/