我想从1d numpy数组(或向量)中选择多个非相邻范围.
假设:
>>> idx = np.random.randint(100, size=10) array([82, 9, 11, 94, 31, 87, 43, 77, 49, 50])
这当然有效:
>>> idx[0:3] array([82, 9, 11])
这可以通过单个索引获取:
>>> idx[[0,3,4]] array([82, 94, 31])
但是,如果我想要的选择范围0:3
,以及7:
?
我试过了:
>>> idx[[0:3,7:]] SyntaxError: invalid syntax
有没有一种简单的方法可以做到这一点,还是我需要单独生成它们并连接?
您需要在索引之前或之后连接. np.r_
让事情变得简单
In [116]: idx=np.array([82, 9, 11, 94, 31, 87, 43, 77, 49, 50]) In [117]: np.r_[0:3,7:10] Out[117]: array([0, 1, 2, 7, 8, 9]) In [118]: idx[np.r_[0:3,7:10]] Out[118]: array([82, 9, 11, 77, 49, 50])
np.r_
扩展切片并连接它们.
您可以混合切片和列表:
In [120]: np.r_[0:3,7:10,[0,3,4]] Out[120]: array([0, 1, 2, 7, 8, 9, 0, 3, 4])
在索引之前连接可能比之后更快,但对于像这样的1d数组,我认为差异不大.