代码之家  ›  专栏  ›  技术社区  ›  matt

如何使numpy在还原操作后广播操作

  •  4
  • matt  · 技术社区  · 7 年前

    我正在尝试规范化最后维度的一些数据。

    #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个维度。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Divakar    7 年前

    只需保持尺寸 keepdims arg,然后减去-

    m = x.mean((-3, -2, -1),keepdims=True)
    x -= m
    

    不管用于减速的轴是什么,这都会起作用,并且应该是一个干净的解决方案。