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

检查和索引numpy数组中的非唯一/重复值

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

检查和索引numpy数组中的非唯一/重复值

虽然字典是O(n),但Python对象的开销有时使使用numpy函数更方便,这些函数使用排序功能并且是O(n * log n)。在您的情况下,起点将是:

a = [1, 345, 23, 345, 90, 1]unq, unq_idx, unq_cnt = np.unique(a, return_inverse=True, return_counts=True)

如果您使用的numpy版本早于1.9,则最后一行必须是:

unq, unq_idx = np.unique(a, return_inverse=True)unq_cnt = np.bincount(unq_idx)

我们创建的三个数组的内容是:

>>> unqarray([  1,  23,  90, 345])>>> unq_idxarray([0, 3, 1, 3, 2, 0])>>> unq_cntarray([2, 1, 1, 2])

获取重复项:

cnt_mask = unq_cnt > 1dup_ids = unq[cnt_mask]>>> dup_idsarray([  1, 345])

获取索引要稍微复杂一点,但是非常简单:

cnt_idx, = np.nonzero(cnt_mask)idx_mask = np.in1d(unq_idx, cnt_idx)idx_idx, = np.nonzero(idx_mask)srt_idx = np.argsort(unq_idx[idx_mask])dup_idx = np.split(idx_idx[srt_idx], np.cumsum(unq_cnt[cnt_mask])[:-1])>>> dup_idx[array([0, 5]), array([1, 3])]


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

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

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