计算批处理的平均值和标准值[Python/Numpy]

2024-09-27 00:12:19 发布

您现在位置:Python中文网/ 问答频道 /正文

寻找计算平均值和标准每通道在一批有效。在


详细信息:

  • 批量:128
  • 图片:32x32
  • 3通道(RGB)

所以每个批次的大小是[128,32,32,3]。在

有很多批处理(naivemethod在所有批处理中花费~4min)。在

我想输出2个数组:(meanR,meanG,meanB)和(stdR,stdG,stdB)


(另外,如果有一种有效的方法在计算后对批处理执行算术运算,那么这将很有帮助。例如,从每个图像中减去整个数据集的平均值)


Tags: 标准图片详细信息rgb数组批量平均值花费
3条回答

假设你想得到多轴的平均值(如果我没弄错的话)。numpy.mean(a, axis=None)已经支持多轴平均值,如果轴是tuple。在

我不太清楚你说的天真的方法是什么意思。在

你可以用这个方法来计算R,G,B的平均值和标准差

a = np.random.rand(128,32,32,3)
for i in range(3):
    means = [m for m in np.mean(a, axis = (3, i))]
for i in range(3):
    stds = [s for s in np.std(a, axis = (3, i))]

axis=(3,i)3代表通道,i代表颜色(R,G,B)。你也可以参考这个链接。Get mean of 2D slice of a 3D array in numpy 。我希望这能对你有所帮助。在

如果我正确理解您的意思,并且您想计算所有图像的平均值和标准值:

演示:两张(2,2,3)形状的图片(为了简单起见):

In [189]: a
Out[189]:
array([[[[ 1,  2,  3],
         [ 4,  5,  6]],

        [[ 7,  8,  9],
         [10, 11, 12]]],


       [[[13, 14, 15],
         [16, 17, 18]],

        [[19, 20, 21],
         [22, 23, 24]]]])

In [190]: a.shape
Out[190]: (2, 2, 2, 3)

In [191]: np.mean(a, axis=(0,1,2))
Out[191]: array([ 11.5,  12.5,  13.5])

In [192]: np.einsum('ijkl->l', a)/float(np.prod(a.shape[:3]))
Out[192]: array([ 11.5,  12.5,  13.5])

速度测量:

^{pr2}$

相关问题 更多 >

    热门问题