Python NumPy中切片的不同起始索引

Python NumPy中切片的不同起始索引,python,arrays,performance,numpy,vectorization,Python,Arrays,Performance,Numpy,Vectorization,我想知道,如果不使用for循环进行迭代,是否可以执行以下操作: a = np.array([[1, 2, 5, 3, 4], [4, 5, 6, 7, 8]]) cleaver = np.argmax(a == 5, axis=1) # np.array([2, 1]) foo(a, cleaver) >>> np.array([False, False, True, True, True], [False, Tru

我想知道,如果不使用for循环进行迭代,是否可以执行以下操作:

a = np.array([[1, 2, 5, 3, 4],
              [4, 5, 6, 7, 8]])

cleaver = np.argmax(a == 5, axis=1)  # np.array([2, 1])

foo(a, cleaver)

>>> np.array([False, False, True, True, True],
             [False, True, True, True, True])
有没有办法通过切片或其他非迭代函数来实现这一点?我正在使用的数组非常大,逐行迭代它们的代价非常昂贵。

你可以使用一些魔法-

cleaver[:,无]
cleaver[:,None] <= np.arange(a.shape[1])
In [60]: a
Out[60]: 
array([[1, 2, 5, 3, 4],
       [4, 5, 6, 7, 8]])

In [61]: cleaver
Out[61]: array([2, 1])

In [62]: cleaver[:,None] <= np.arange(a.shape[1])
Out[62]: 
array([[False, False,  True,  True,  True],
       [False,  True,  True,  True,  True]], dtype=bool)