欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python数据处理——获得一个0-1矩阵每行/列第一个数值1的位置

程序员文章站 2022-07-12 21:37:30
...

代码逻辑很简单:找到每一行/列最大值的位置即可,因为都是0和1,所以找到的最大值就是第一个数据

(data!=0).argmax(axis=1)

完整代码是这样:

data = np.array([[1,0,1],[0,1,0],[0,0,1]])
(data!=0).argmax(axis=1)
#array([0, 1, 2], dtype=int64)

但是还是会有问题,如果你有某一行的数据全为0,那就会把那一行的第一个为0的数据给识别出来,为了防止这个问题,我们可以用以下的这个方法来解决上面的问题,如果有某一行数据没有1,那就设置为-1

def first_nonzero(arr, axis, invalid_val=-1):
    mask = arr!=0
    return np.where(mask.any(axis=axis), mask.argmax(axis=axis), invalid_val)

arr=numpy.array([[1,1,0],[1,1,0],[0,0,1],[0,0,0]])
first_nonzero(arr, axis=0, invalid_val=-1)
# array([ 0,  1, -1])