我有傻瓜。 python numpy数组,arr:

([1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 3L, 3L, 3L, 2L, 2L, 2L,
       2L, 2L, 2L, 1L, 1L, 1L, 1L])


我可以找到1的第一次出现:

np.where(arr.squeeze() == 1)[0]


如何找到0或3之前的最后1个位置。

最佳答案

这是使用np.wherenp.in1d的一种方法-

# Get the indices of places with 0s or 3s and this
# decides the last index where we need to look for 1s later on
last_idx = np.where(np.in1d(arr,[0,3]))[0][-1]

# Get all indices of 1s within the range of last_idx and choose the last one
out = np.where(arr[:last_idx]==1)[0][-1]


请注意,对于没有找到索引的情况,使用[0][-1]之类的东西会抱怨没有元素,因此需要在这些行周围包裹错误检查代码。

样品运行-

In [118]: arr
Out[118]: array([1, 1, 3, 0, 3, 2, 0, 1, 2, 1, 0, 2, 2, 3, 2])

In [119]: last_idx = np.where(np.in1d(arr,[0,3]))[0][-1]

In [120]: np.where(arr[:last_idx]==1)[0][-1]
Out[120]: 9

关于python - 在python numpy中的特定值之前找到最后一个元素的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36231381/

10-12 07:12