web-dev-qa-db-ja.com

Python numpy配列のマイナスインデックス作成

私はnumpyの索引付けについて少し混乱しています。次の例を挙げてください。

>>> import numpy as np
>>> x = np.arange(10)
>>> x.shape = (2,5)
>>> x
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
>>> x[0:-1]
array([[0, 1, 2, 3, 4]])
>>> x[1:-1]
array([], shape=(0, 5), dtype=int64)
>>> x[1:]
array([[5, 6, 7, 8, 9]])

私が混乱しているのは、x[0:-1]を使用して最初の行を2Dアレイとして取得できます。しかし、-1は実際にインデックスの点で何を意味しますか?私はx[1:-1]を呼び出すことが私に2行目を与えるだろうと思っただろうが、代わりに私に空の配列を返し、私が欲しいものを得るためにx [1:]を使用する必要があるならば、

私は少し混乱しています。助けてくれてありがとう

7
Ragadabing

この文は次のとおりです。

_In [31]: x[0:-1]
_

このインデックス作成方法は、「1行目から始めて最後の行(除外された)」を意味します。その結果、最初の行が得られます。

_Out[31]: array([[0, 1, 2, 3, 4]])
_

しかし、あなたがするとき:

_ In [31]: x[1:-1]   
 Out[31]: array([], shape=(0, 5), dtype=int64)
_

「2行目から始めて最後の行を含めない」ためにNUMPYを求めています。ここで2行目も最後の行であるため、除外され、その結果として空の配列が表示されます。


詳細:ここで_-1_などのマイナスの索引付けを使用することについては何もない。たとえば、次のインデックス作成方法も空の配列を返します。

_# asking to "start at first row and end at first row"
In [42]: x[0:0]  
Out[42]: array([], shape=(0, 5), dtype=int64)

# asking to "start at second row and end at second row"
In [43]: x[1:1]  
Out[43]: array([], shape=(0, 5), dtype=int64)
_

Python/numpyでのインデックス付けに関しては、常に "左隅と右排他"です。

これが平野Python(すなわちlistを索引付けする)のものです。

_In [52]: lst = [1, 2] 

In [53]: lst[1:-1]    
Out[53]: []   # an empty list
_

_[start:stop:step]_の索引付けの構文をご注意ください

Weが起動した場合同じインデックスで停止が停止します。その結果、空のデータ構造(配列/リスト/タプルなど)が返されます。

4
kmario23

スライスx[a:b]を要求した場合、aからbを含めないでください。そのため、x[1:-1]スライスをスライスすると、結果の配列に-11と同じになるため、(2,5)アレイと同じになるようになります。もう一つの例:

>>> import numpy as np
>>> x = np.arange(15)
>>> x.shape = (3,5)
>>> x
array([[0,  1,  2,  3,  4],
       [5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> x[0:-1]
array([[0, 1, 2, 3, 4]])
>>> x[1:-1]
array([[5, 6, 7, 8, 9]])

上記の最後の操作は、行1からのxから、最後の行は、行だけであり、これは単なる行1です。

1
MPA