「ダブル」スライスがどこで機能しないのか理解できませんか?
>>> t
array([False, True, True, True], dtype=bool)
>>> np.where(t[:3])
(array([1, 2]),)
しかし:
>>> np.where(t[1:3])
(array([0, 1]),)
np.where
切り出した内容の完全なコンテキストがわからないため、これが期待される出力です。最初にスライスされた配列を見てください。
In [384]: t[:3]
Out[384]: array([False, True, True], dtype=bool)
# 0 1 2
In [385]: np.where(t[:3])
Out[385]: (array([1, 2]),)
In [386]: t[1:3]
Out[386]: array([ True, True], dtype=bool)
# 0 1
In [387]: np.where(t[1:3])
Out[387]: (array([0, 1]),)
2 番目では、最初の要素をスキップしています。から開始します1
が、最初の要素は0
次のとおりです。
In [388]: t[0:3]
Out[388]: array([False, True, True], dtype=bool)
# 0 1 2
In [389]: np.where(t[0:3])
Out[389]: (array([1, 2]),)
元の配列からインデックスが必要な場合は、@BiRico が上記で示唆しているように、いくつかの計算を行う必要があります (ただし、最初にタプルから最初の要素を取得するように注意してください)。
In [390]: n = 1
In [391]: np.where(t[n:3])[0] + n
Out[391]: array([1, 2])