我有一个庞大的数组但是为了说明我使用的是一个大小为14的数组。我有另一个包含2,3,3,6的列表。如何有效地不用看看创建一个新数组的列表,这样:
import numpy as np
A = np.array([1,2,4,5,7,1,2,4,5,7,2,8,12,3]) # array with 1 axis
subArraysizes = np.array( 2, 3, 3, 6 ) #sums to number of elements in A
B = list()
B[0] = [1,2]
B[1] = [4,5,7]
B[2] = [1,2,4]
B[3] = [5,7,2,8,12,3]
即。选择A中的前2个元素将其存储在B中,选择A的下3个元素将其存储在B中,依此类推,按照它在A中出现的顺序。
答案 0 :(得分:3)
您可以使用np.split
-
B = np.split(A,subArraysizes.cumsum())[:-1]
示例运行 -
In [75]: A
Out[75]: array([ 1, 2, 4, 5, 7, 1, 2, 4, 5, 7, 2, 8, 12, 3])
In [76]: subArraysizes
Out[76]: array([2, 3, 3, 6])
In [77]: np.split(A,subArraysizes.cumsum())[:-1]
Out[77]:
[array([1, 2]),
array([4, 5, 7]),
array([1, 2, 4]),
array([ 5, 7, 2, 8, 12, 3])]