numpy中是否有任何功能可以将该数组按第一列进行分组?

我在互联网上找不到任何好的答案。

>>> a
array([[  1, 275],
       [  1, 441],
       [  1, 494],
       [  1, 593],
       [  2, 679],
       [  2, 533],
       [  2, 686],
       [  3, 559],
       [  3, 219],
       [  3, 455],
       [  4, 605],
       [  4, 468],
       [  4, 692],
       [  4, 613]])

想要的输出:
array([[[275, 441, 494, 593]],
       [[679, 533, 686]],
       [[559, 219, 455]],
       [[605, 468, 692, 613]]], dtype=object)

最佳答案

受到Eelco Hoogendoorn's library的启发,但没有他的库,并使用数组的第一列一直在增加的事实(如果没有,请先使用就位a.sort(axis=0)进行排序)

>>> np.split(a[:,1], np.unique(a[:, 0], return_index=True)[1][1:])
[array([275, 441, 494, 593]),
 array([679, 533, 686]),
 array([559, 219, 455]),
 array([605, 468, 692, 613])]
我没有“timeit”,但这可能是解决问题的更快方法:
  • 没有python native 循环
  • 结果列表是numpy数组,如果您需要对它们执行其他numpy操作,则无需进行新的转换
  • 像O(n)那样的复杂性

  • [编辑]我改善了答案
    ns63sr

    关于python - 是否有按功能分组的numpy?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38013778/

    10-11 19:17
    查看更多