首次出现的指标
使用np.argmax
沿轴(零轴这里列)非零的面具拿到第一的指标matches
(真实值)
(arr!=0).argmax(axis=0)
扩展到涵盖通用轴说明符,并且在沿着该轴找不到元素的非零的情况下,我们将有一个类似的实现-
def first_nonzero(arr, axis, invalid_val=-1): mask = arr!=0 return np.where(mask.any(axis=axis), mask.argmax(axis=axis), invalid_val)
请注意,由于
argmax()所有
False值都会返回
0,因此如果
invalid_val需要的话
0,我们将直接使用生成最终输出
mask.argmax(axis=axis)。
样品运行-
In [296]: arr # Different from given sample for varietyOut[296]: array([[1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 0, 0]])In [297]: first_nonzero(arr, axis=0, invalid_val=-1)Out[297]: array([ 0, 1, -1])In [298]: first_nonzero(arr, axis=1, invalid_val=-1)Out[298]: array([ 0, 0, 1, -1])
扩展到涵盖所有比较操作
为了找到第一
zeros,简单地使用
arr==0作为
mask在功能使用。对于等于某个特定值的第一个
val,
arr ==val在
comparisons此处对所有可能的情况使用等等。
最近一次出现的指标
要找到符合特定比较标准的最后一个,我们需要沿该轴翻转,并使用相同的用法
argmax,然后通过偏离轴长来补偿该翻转,如下所示-
def last_nonzero(arr, axis, invalid_val=-1): mask = arr!=0 val = arr.shape[axis] - np.flip(mask, axis=axis).argmax(axis=axis) - 1 return np.where(mask.any(axis=axis), val, invalid_val)
样品运行-
In [320]: arrOut[320]: array([[1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 0, 0]])In [321]: last_nonzero(arr, axis=0, invalid_val=-1)Out[321]: array([ 1, 2, -1])In [322]: last_nonzero(arr, axis=1, invalid_val=-1)Out[322]: array([ 0, 1, 1, -1])
同样,
comparisons这里所有可能的情况都通过使用相应的比较器进行获取
mask,然后在列出的函数中使用来覆盖。



