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])
上一篇: 一个处理JSON的例子
下一篇: 记录一个数据集处理的类