python - 多幅图像各 channel 的平均值

标签 python arrays numpy

我想通过存储在 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/

相关文章:

python - Visual Studio for python 中的 ModuleNotFoundError

python - 如何使用python处理时间序列中股票价格的连续缺失值?

arrays - 在 Ruby 中将数组破坏性地转换为数组

python - 向 Numpy ndarray 添加元数据注释

python - 在 Python 中加速矩阵 vector 乘法和求幂,可能通过调用 C/C++

python - 如何使用 IMAPClient 将电子邮件标志更改为最近

python - 代码创建生成器对象,但我想要一个列表

c# - 使用 LINQ 在另一个数组中的数组条目的索引

java - 如何用Java从文本文件中读取格式化数据

python - CUT 或 value_counts() 后分割成 Pandas bin 后返回某个值的 bin