使用索引数组(Python)将numpy数组划分为多个数组

pav*_*163 3 python arrays numpy

我有一个数组:

a = [1, 3, 5, 7, 29 ... 5030, 6000]
Run Code Online (Sandbox Code Playgroud)

此数组是从先前的进程创建的,并且数组的长度可能不同(它取决于用户输入).

我也有一个数组:

b = [3, 15, 67, 78, 138]
Run Code Online (Sandbox Code Playgroud)

(也可能完全不同)

我想使用该数组将数组b切片a为多个数组.

更具体地说,我希望结果数组为:

array1 = a[:3]
array2 = a[3:15]
...
arrayn = a[138:]
Run Code Online (Sandbox Code Playgroud)

哪里n = len(b).

我的第一个想法是创建一个slices带维度的二维数组(len(b), something).但是我们something事先并不知道这个,所以我给它分配了值,len(a)因为它是它可以包含的最大数量.

我有这个代码:

 slices = np.zeros((len(b), len(a)))

 for i in range(1, len(b)):
     slices[i] = a[b[i-1]:b[i]]
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

ValueError: could not broadcast input array from shape (518) into shape (2253412)
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 5

你可以使用numpy.split:

np.split(a, b)
Run Code Online (Sandbox Code Playgroud)

示例:

np.split(np.arange(10), [3,5])
# [array([0, 1, 2]), array([3, 4]), array([5, 6, 7, 8, 9])]
Run Code Online (Sandbox Code Playgroud)