Python-如何基于第一列拆分数组?

Python-如何基于第一列拆分数组?,python,arrays,numpy,split,reshape,Python,Arrays,Numpy,Split,Reshape,我有下面的假数据。将其读入数组后,它将具有形状(8,3)。现在我想根据第一列(ID)分割数据,并返回一个数组列表,其形状为:[(3,3),(2,3),(3,3)]。我认为np.split可以通过为“index\u或\u sections”参数指定一个一维数组来完成这项工作。但是有没有更方便的方法呢 1 700 35 1 700 35 1 700 35 2 680 25 2 680 25 3 750 40 3 750 40 3 750 40 您可以通过组合使用np

我有下面的假数据。将其读入数组后,它将具有形状(8,3)。现在我想根据第一列(ID)分割数据,并返回一个数组列表,其形状为:[(3,3),(2,3),(3,3)]。我认为np.split可以通过为“index\u或\u sections”参数指定一个一维数组来完成这项工作。但是有没有更方便的方法呢

1   700 35
1   700 35
1   700 35
2   680 25
2   680 25
3   750 40
3   750 40
3   750 40

您可以通过组合使用
np.split
sort
np.unique
np.cumsum
来实现这一点

>a=[[170035],
...      [1, 700, 35],
...      [1, 700, 35],
...      [2, 680, 25],
...      [2, 680, 25],
...      [3, 750, 40],
...      [3, 750, 40],
...      [3, 750, 40]]
>>>a=np.数组(a)
>>>#按第一列对数组进行排序。
>>>a=a[a[:,0].argsort()]
>>>np.split(a,np.cumsum(np.unique(a[:,0],return\u counts=True)[1])[:-1])
[数组([[170035],
[  1, 700,  35],
[170035]),数组([268025],
[268025]),数组([375040],
[  3, 750,  40],
[  3, 750,  40]])]

您对非numpy解决方案开放吗?如果第一列中的值是连续的?
np.split(a,np.flatnonzero(np.diff(a[:,0]))+1)
非常方便。这可能是重复的:numpy数组通常包含所有类型相同的数据,并且所有数据都测量相同的内容。它看起来非常有助于您,因为它是专门为处理这样的列数据而设计的。