我不明白为什么“双重”切片在哪里不起作用?
>>> 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]),)
在第二个中,您将跳过第一个元素;您从 开始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])