栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

numpy:如何在numpy数组的每一列中查找第一个非零值?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

numpy:如何在numpy数组的每一列中查找第一个非零值?

首次出现的指标

使用
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
,然后在列出的函数中使用来覆盖。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号