NumPy,高级索引和切片

o75abkj4  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(140)

我试图弄清楚如何在NumPy中同时索引“独立”元素和范围。
假设我们有一个数组

arr = np.arange(0, 20)

我们要取第2、4、6个元素,以及从第10个到数组末尾的所有元素。

arr[np.hstack([2, 4, 6, np.arange(10, len(arr))])]

但这看起来不太优雅。我想要的是这样的:

arr[[2, 4, 6, 10:]]

代码显然不起作用,但有这么简单的东西吗?

ttygqcqt

ttygqcqt1#

不幸的是,numpy只需要一个整数列表(而不是切片)用于高级索引目的。
幸运的是,numpy开发人员预见到了你的用例,并提供了一个索引技巧来将这样的混合索引转换为索引数组:np.r_

>>> import numpy as np

>>> np.r_[2, 4, 6, 10:20]
array([ 2,  4,  6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

请注意,您需要指定切片的结束,因为np.r_不知道数组arr的长度。
所以你可以简单地索引如下:

arr[ np.r_[2, 4, 6, 10:20] ]

相关问题