【问题标题】:Numpy array sum each column values based on the label column for high dimension datasetsNumpy 数组根据高维数据集的标签列对每列值求和
【发布时间】:2020-10-15 17:46:29
【问题描述】:

我正在尝试学习 numpy 机制。我有一个高维的 numpy 数组。我想要的是获得一个数组或列表,它存储按标签分组的每列的总和。例如,特征如下所示:

array([[-16.99176812,  -2.36223789,  -1.87838669, ...,   0.06839992,
         -0.03640378,  -0.54913372],
       [-17.83648228,   1.28261146,  -0.62738817, ...,   0.08641197,
         -0.09980481,  -0.08203106],
       [-16.63403339,   4.33705931,  -2.29143763, ...,  -0.2422984 ,
         -0.59537268,  -0.35633719],
       ...,

并且标签是从不同的数组中给出的,范围从 0 到 9:

array([6, 0, 1, ..., 1, 2, 2]

如何使用 numpy 根据标签获取每列的总和?我通过创建一个将这两个数组组合在一起并使用 df.groupby().mean() 的数据框来使用 pandas 完成此操作。然而,为了实现我的目标输出,如果我首先将它们传输到数据帧并将输出转换回 numpy 数组,这将变得乏味。提前谢谢!

【问题讨论】:

  • 你能提供一个更小的数据集来验证解决方案吗?您可能可以使用np.add.at
  • 将输入转换为数据帧并取回 numpy 数组只需要您多花一行代码。除非您需要终极的硬核 numpy 解决方案,否则我认为纯 numpy 版本在编码方面不会更短。
  • @user3483203 数据集实际上相当大。正如 Hoang 所说,我将使用 pandas,因为它似乎是解决问题的最简单方法
  • @QuangHoang 是的,我注意到使用 pandas 可能是解决它的最简单方法。只是想知道 numpy 库是否包含任何此类函数

标签: python arrays numpy group-by


【解决方案1】:

np.add.at 方法(我认为,基于问题规范):

output = np.zeros((10, input.shape[1]))
np.add.at(output, labels, input)
#since you seem to want `mean`
output /= np.bincount(labels)

  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2022-01-22
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多