从已包含每个部分编号的列表中为np.split创建索引列表

时间:2017-06-05 10:46:17

标签: python numpy

我有两个数字列表

list = [1,2,3,4,5,6,7,8,9]
number = [3,2,1,3]

我想从number

为np.split创建索引
index = [3,5,6,9]

代表

np.split(list, index)

预期结果

[[1,2,3],[4,5],[6],[7,8,9]]

我尝试了类似newlist = [x+number[0:index(x)] for x in list]的内容,但它仍无效

1 个答案:

答案 0 :(得分:1)

方法#1

如果我们想使用np.split生成数组列表,我们需要在这些索引上使用np.cumsum来为我们提供需要拆分输入的索引列表 -

np.split(list1, np.cumsum(number)[:-1])

示例运行 -

In [36]: list1 = [1,2,3,4,5,6,7,8,9]
    ...: number = [3,2,1,3]
    ...: 

In [37]: np.split(list1, np.cumsum(number)[:-1])
Out[37]: [array([1, 2, 3]), array([4, 5]), array([6]), array([7, 8, 9])]

方法#2

要获得列表列表,使用cumsum再次使用循环理解的方法 -

idx = np.r_[0,np.cumsum(number)]
out = [list1[idx[i]:idx[i+1]] for i in range(len(idx)-1)]

示例运行 -

In [45]: idx = np.r_[0,np.cumsum(number)]

In [46]: [list1[idx[i]:idx[i+1]] for i in range(len(idx)-1)]
Out[46]: [[1, 2, 3], [4, 5], [6], [7, 8, 9]]