为什么numpy.where不能与'double'切片数组一起使用?

时间:2013-09-13 22:35:53

标签: python arrays numpy

我不明白为什么'双'切片不适用于哪里?

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

可是:

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

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])