In [556]: test_data=np.arange(24.).reshape(2,4,3)
In [557]: test_data
Out[557]:
array([[[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.],
[ 9., 10., 11.]],
[[ 12., 13., 14.],
[ 15., 16., 17.],
[ 18., 19., 20.],
[ 21., 22., 23.]]])
沿着最后一个维度缩放值只是一种乘法操作:
In [558]: test_data*np.array([0.2, 0.5, 0.3])
Out[558]:
array([[[ 0. , 0.5, 0.6],
[ 0.6, 2. , 1.5],
[ 1.2, 3.5, 2.4],
[ 1.8, 5. , 3.3]],
[[ 2.4, 6.5, 4.2],
[ 3. , 8. , 5.1],
[ 3.6, 9.5, 6. ],
[ 4.2, 11. , 6.9]]])
可以使用 test_data *= np.array([....])
直接实现。
对于最后一个维度取平均值只需:
In [559]: test_data.mean(axis=-1)
Out[559]:
array([[ 1., 4., 7., 10.],
[ 13., 16., 19., 22.]])
这是2D。@divakar已经展示了如何保持它为3D(keep_dims
)甚至是全尺寸(2,4,1)或者(2,4,3)。
In [561]: test_data.mean(axis=-1,keepdims=True)
Out[561]:
array([[[ 1.],
[ 4.],
[ 7.],
[ 10.]],
[[ 13.],
[ 16.],
[ 19.],
[ 22.]]])
np.average
允许您指定权重(加权平均):
In [568]: np.average(test_data, axis=-1, weights=[0.2,0.5,0.3])
Out[568]:
array([[ 1.1, 4.1, 7.1, 10.1],
[ 13.1, 16.1, 19.1, 22.1]])
这与在最后一个维度上进行点积相同
In [569]: np.dot(test_data, [0.2,0.5,0.3])
Out[569]:
array([[ 1.1, 4.1, 7.1, 10.1],
[ 13.1, 16.1, 19.1, 22.1]])