numpy中一个数组的多个索引列表

时间:2014-08-24 20:50:59

标签: python arrays numpy indexing

在正常情况下,带有整数的列表可用作数组的索引。我们说

arr = np.arange(10)*2
l = [1,2,5]
arr[l] # this gives np.array([2,4,10])

而不是一个索引列表,我有几个,具有不同的长度,我想为我的索引列表中的每个子列表获得arr[l]。如果没有顺序方法(使用for)或者更好,使用比使用numpy更少的时间,我怎样才能实现这个目标?

例如:

lists = [[1,2,5], [5,6], [2,8,4]]
arr = np.arange(10)*2
result = np.array([[2,4,10], [10, 12], [4,16,8]]) #this is after the procedure I want to get

1 个答案:

答案 0 :(得分:2)

这取决于列表的大小是否合理。一种选择是将它们连接起来,进行切片然后重新分配到列表中。

lists = [[1,2,5], [5,6], [2,8,4]]
arr = np.arange(10)*2

extracted = arr[np.concatenate(lists)]

indices = [0] + list(np.cumsum(map(len, lists)))
result = [extracted[indices[i]:indices[i + 1]] for i in range(len(lists))]

或者,考虑到@ unutbu的评论:

result = np.split(extracted, indices[1:-1])