Oli*_*row 3 python numpy channel batch-processing tensorflow
希望高效地计算批次中每个通道的平均值和标准差。
细节:
因此每个批次的大小为 [128, 32, 32, 3]。
有很多批次(简单方法在所有批次上大约需要 4 分钟)。
我想输出2个数组:(meanR,meanG,meanB)和(stdR,stdG,stB)
(此外,如果在计算之后有一种有效的方法对批次执行算术运算,那么这将很有帮助。例如,从每个图像中减去整个数据集的平均值)
如果我理解正确并且您想计算所有图像的平均值和标准值:
\n\n演示:2 个 (2,2,3) 形状的图像(为了简单起见):
\n\nIn [189]: a\nOut[189]:\narray([[[[ 1, 2, 3],\n [ 4, 5, 6]],\n\n [[ 7, 8, 9],\n [10, 11, 12]]],\n\n\n [[[13, 14, 15],\n [16, 17, 18]],\n\n [[19, 20, 21],\n [22, 23, 24]]]])\n\nIn [190]: a.shape\nOut[190]: (2, 2, 2, 3)\n\nIn [191]: np.mean(a, axis=(0,1,2))\nOut[191]: array([ 11.5, 12.5, 13.5])\n\nIn [192]: np.einsum('ijkl->l', a)/float(np.prod(a.shape[:3]))\nOut[192]: array([ 11.5, 12.5, 13.5])\nRun Code Online (Sandbox Code Playgroud)\n\n速度测量:
\n\nIn [202]: a = np.random.randint(255, size=(128,32,32,3))\n\nIn [203]: %timeit np.mean(a, axis=(0,1,2))\n9.48 ms \xc2\xb1 822 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n\nIn [204]: %timeit np.einsum('ijkl->l', a)/float(np.prod(a.shape[:3]))\n1.82 ms \xc2\xb1 22.2 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 1000 loops each)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4265 次 |
| 最近记录: |