如何在Python中使用间隔索引多个数组项

Jeo*_*eon 7 python arrays numpy

假设我有一个列表:

import numpy as np
a = [2, 4, 6, 8, ..., 1000] # total 500 elements
b = np.array(a)             # numpy version
Run Code Online (Sandbox Code Playgroud)

我想获得第1到第100,第201到第300,第401到第500个元素,并将它们变成一个新的数组.

为此,我尝试了以下代码:

a_sub = a[0:100] + a[200:300] + a[400:500]
b_sub = np.concatenate((b[0:100], b[200:300], b[400:500]))
Run Code Online (Sandbox Code Playgroud)

但我希望通过简单的oneline-indexing来实现

说:

a_sub = a[(0:100, 200:300, 400:500)]
a_sub = a[[0:100, 200:300, 400:500]]
b_sub = b[[0:100, 200:300, 400:500]]
b_sub = b[[0:100, 200:300, 400:500]]
Run Code Online (Sandbox Code Playgroud)

但以上都是无效的,我找不到这样的oneliner索引.

shx*_*hx2 2

您可以将切片转换为掩码数组(通过对一个数组进行切片),并使用|(or) 运算符合并掩码数组。

ones = np.ones(b.shape, dtype = bool)
mask = ones[ 0:100] | ones[200:300] | ones[400:500]
b_sub = b[mask]
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的切片重叠或以非递增顺序出现,则会产生与原始代码不同的数组(项目不会重复,并且始终以与原始数组相同的顺序出现)。