1

我有一个形状为 N,2 且 N>10000 的 numpy 数组。在第一列我有例如 6 个类值(例如 0.0,0.2,0.4,0.6,0.8,1.0)在第二列我有浮点值。现在我想为第一列的所有不同类别计算第二列的平均值,从而为每个类别产生 6 个平均值。

有没有一种方法可以做到这一点,以避免手动循环,尤其是在 N 非常大的情况下?

4

2 回答 2

3

在纯 numpy 中,您会执行以下操作:

unq, idx, cnt = np.unique(arr[:, 0], return_inverse=True,
                          return_counts=True)
avg = np.bincount(idx, weights=arr[:, 1]) / cnt
于 2015-02-22T19:49:10.387 回答
0

我将沃伦的答案复制到这里,因为它最好地解决了我的问题,我想检查它是否已解决:

这是一个“groupby/aggregation”操作。问题是这接近于 根据 index 获取特定数组行的中位数的副本。...您也可以按照那里的建议使用 scipy.ndimage.labeled_comprehension ,但是您必须将第一列转换为整数(例如 idx = (5*data[:, 0]).astype(int)

我正是这样做的。

于 2015-02-23T08:44:02.110 回答