2015-12-09 9 views
11

1dのnumpy配列(またはベクトル)から複数の非隣接範囲を選択したいと考えています。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 

は、これを実行するための簡単な方法はありますか、私はそれらを別々に生成し、連結する必要がありますか?

答えて

15

インデックス作成の前後に連結する必要があります。 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]) 

は、インデックスの前に連結するには、後よりも、おそらく高速ですが、このような1次元配列のために、私は違いは重要ではないと思います。

関連する問題