我有一个三维 numpy 数组,例如 RGB 图像。
我想对数组的每一层执行相同的二维操作;例如标准差或总和。
如果不使用for
循环,是否有一个简单的numpy或scipy命令来执行操作,返回一个numpy数组?
例如: numpy 数组的三层是:
myArray[:,:,0] = [[1,2],[3,4]]
myArray[:,:,1] = [[0,0],[1,1]]
myArray[:,:,2] = [[4,4],[4,4]]
想象一个命令numpy.sumLayers()
numpy.sumLayers(myArray) = array([[10],[2],[16]])
或类似numpy.standardDeviationLayers()
最佳答案
3D 堆栈的每一层都意味着轴 0
和 1
为 axis=2
中的每个索引组合在一起。因此,要解决您的问题,您可以使用 np.sum
和 np.std
沿着轴 0
,1
,就像这样 -
sum_val = myArray.sum(axis=(0,1))
std_val = myArray.std(axis=(0,1))
您还可以使用np.einsum
更有效地执行求和。 -
sum_val = np.einsum('ijk->k',myArray) # k represents axis = 2
示例运行 -
In [11]: myArray
Out[11]:
array([[[ 1., 0., 4.],
[ 2., 0., 4.]],
[[ 3., 1., 4.],
[ 4., 1., 4.]]])
In [12]: myArray.sum(axis=(0,1))
Out[12]: array([ 10., 2., 16.])
In [13]: myArray.std(axis=(0,1))
Out[13]: array([ 1.11803399, 0.5 , 0. ])
In [14]: np.einsum('ijk->k',myArray)
Out[14]: array([ 10., 2., 16.])
关于python - 在 3 维堆栈的每一层上执行 2 维操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975263/