1

我不明白为什么“双重”切片在哪里不起作用?

>>> t
array([False,  True,  True,  True], dtype=bool)
>>> np.where(t[:3])
(array([1, 2]),)

但:

>>> np.where(t[1:3])
(array([0, 1]),)
4

1 回答 1

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])
于 2013-09-13T22:39:17.390 回答