我不明白为什么'双'切片不适用于哪里?
>>> t
array([False, True, True, True], dtype=bool)
>>> np.where(t[:3])
(array([1, 2]),)
可是:
>>> np.where(t[1:3])
(array([0, 1]),)
答案 0 :(得分:2)
这是预期的输出,因为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])