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

快速,python式的方式在numpy数组中对1的块进行排名?

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

快速,python式的方式在numpy数组中对1的块进行排名?

您想贴上标签,还好,SciPy有一个,

scipy.ndimage.label
-

In [43]: from scipy.ndimage import labelIn [47]: out = label(arr)[0]In [48]: np.where(arr==0,np.nan,out-1)Out[48]: array([nan, nan, nan,  0.,  0.,  0., nan, nan, nan,  1.,  1., nan, nan,       nan,  2.,  2.,  2.,  2.])

还有一些NumPy的 工作 -

def rank_chunks(arr):    m = np.r_[False,arr.astype(bool)]    idx = np.flatnonzero(m[:-1] < m[1:])    id_ar = np.zeros(len(arr),dtype=float)    id_ar[idx[1:]] = 1    out = id_ar.cumsum()    out[arr==0] = np.nan    return out

另一个与

masking
+
np.repeat
-

def rank_chunks_v2(arr):    m = np.r_[False,arr.astype(bool),False]    idx = np.flatnonzero(m[:-1] != m[1:])    l = idx[1::2]-idx[::2]    out = np.full(len(arr),np.nan,dtype=float)    out[arr!=0] = np.repeat(np.arange(len(l)),l)    return out

时间(将给定的输入平铺到1Mx)-

In [153]: arr_big = np.tile(arr,1000000)In [154]: %timeit np.where(arr_big==0,np.nan,label(arr_big)[0]-1)     ...: %timeit rank_chunks(arr_big)     ...: %timeit rank_chunks_v2(arr_big)1 loop, best of 3: 312 ms per loop1 loop, best of 3: 263 ms per loop1 loop, best of 3: 229 ms per loop


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

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

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