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

numpy数组将多列除以一列

  •  2
  • PydPiper  · 技术社区  · 2 年前

    是否可以将多个numpy数组列除以另一个1D列(按行划分)?

    实例

    a1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    a2 = np.array([11,12,13])
    array([11, 12, 13])
    # that is divide all rows, but only columns 1 and 2 by a2 array
    a1[:,:2] / a2
    ValueError: operands could not be broadcast together with shapes (3,2) (3,)
    

    我确实试过这个,但这个看起来不优雅

    (a1[:,:2].T / a2).T
    array([[0.09090909, 0.18181818],
           [0.33333333, 0.41666667],
           [0.53846154, 0.61538462]])
    
    1 回复  |  直到 2 年前
        1
  •  2
  •   ThePyGuy Tim Roberts    2 年前

    您的a1数组是2D,a2是1D,在执行除法之前,请尝试将a2数组的维度扩展到2D:

    >>> a1[:,:2]/np.expand_dims(a2, 1)
    
    array([[0.09090909, 0.18181818],
           [0.33333333, 0.41666667],
           [0.53846154, 0.61538462]])
    

    显然,你可以使用 a2[:, None] 而不是打电话 expand_dims 功能,甚至更干净的代码。