我试图弄清楚如何在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:]]
代码显然不起作用,但有这么简单的东西吗?
ttygqcqt1#
不幸的是,numpy只需要一个整数列表(而不是切片)用于高级索引目的。幸运的是,numpy开发人员预见到了你的用例,并提供了一个索引技巧来将这样的混合索引转换为索引数组:np.r_
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
arr[ np.r_[2, 4, 6, 10:20] ]
1条答案
按热度按时间ttygqcqt1#
不幸的是,numpy只需要一个整数列表(而不是切片)用于高级索引目的。
幸运的是,numpy开发人员预见到了你的用例,并提供了一个索引技巧来将这样的混合索引转换为索引数组:
np.r_
请注意,您需要指定切片的结束,因为
np.r_
不知道数组arr
的长度。所以你可以简单地索引如下: