我有一个三维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()
答案 0 :(得分:2)
3D堆栈的每一层都意味着0
中的每个索引都会合并1
和axis=2
个轴。因此,为了解决您的问题,您可以沿轴0
,1
使用np.sum
和np.std
,就像这样 -
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.])