Python 如何让numpy在还原操作后广播操作

Python 如何让numpy在还原操作后广播操作,python,arrays,numpy,array-broadcasting,Python,Arrays,Numpy,Array Broadcasting,我正在尝试标准化最后维度的一些数据 #sample data x = numpy.random.random((3, 1, 4, 16, 16)) x[1] = x[1]*2 x[2] = x[2]*4 我能理解你的意思 m = x.mean((-3, -2, -1)) 现在,x.shape是(3,1,4,16,16),m.shape是(3,1),我想从每个样本中减去平均值。到目前为止我有 for i in range(x.shape[0]): for j in range(x.sh

我正在尝试标准化最后维度的一些数据

#sample data
x = numpy.random.random((3, 1, 4, 16, 16))
x[1] = x[1]*2
x[2] = x[2]*4
我能理解你的意思

m = x.mean((-3, -2, -1))
现在,x.shape是(3,1,4,16,16),m.shape是(3,1),我想从每个样本中减去平均值。到目前为止我有

for i in range(x.shape[0]):
    for j in range(x.shape[1]):
        x[i,j] = x[i,j] - m[i,j]

这是可行的,但有两个缺点。我使用显式循环,它要求形状有5个维度。

只需使用
keepdims
arg保持维度,然后减去-

#sample data
x = numpy.random.random((3, 1, 4, 16, 16))
x[1] = x[1]*2
x[2] = x[2]*4
m = x.mean((-3, -2, -1),keepdims=True)
x -= m
无论用于还原的轴是什么,这都会起作用,并且应该是一种干净的解决方案