numpy数组中是否可以进行自定义切片(获取特定元素,然后每隔n个元素再取一个)?

3
我需要一种更加定制化的方法来从numpy数组中提取给定元素,而不仅仅是普通的索引。特别地,我想获取任意预定义的元素,然后每隔n个元素取一个,从给定点开始。
比如说,我想要获取一个数组的第二个(即索引号为2)和第四个元素,然后从第六个元素开始,每隔三个元素取一个。目前,我的做法是:
 newArray = np.concatenate(myArray[(2, 4)], myArray[6::3])

有没有更方便的方法来实现这个?
1个回答

2

这跟您现在做的事情基本一致,但您可能会发现以下方式更加方便:

new_array = my_array[np.r_[2, 4, 6:len(my_array):3]]

np.r_基本上是连接(concatenation) + arange类似的切片(slice)。

举个例子:

In [1]: import numpy as np

In [2]: np.r_[np.arange(5), np.arange(1, 4)]
Out[2]: array([0, 1, 2, 3, 4, 1, 2, 3])

In [3]: np.r_[1, 2, :5]
Out[3]: array([1, 2, 0, 1, 2, 3, 4])

In [4]: np.r_[:5]
Out[4]: array([0, 1, 2, 3, 4])

该方法的缺点是您正在建立一个(可能非常大)的额外索引数组。无论哪种情况,您都将最终创建一个副本,但如果my_array非常大,则原始方法更有效。
np.r_有些难以阅读(适用于交互式使用),但它可以是构建任意索引数组的非常方便的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接