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

更快的numpy-solution而不是itertools.combinations?

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

更快的numpy-solution而不是itertools.combinations?

这是一个比itertools UPDATE快一点的:和(

nump2
)实际上快得多的一个:

import numpy as npimport itertoolsimport timeitdef nump(n, k, i=0):    if k == 1:        a = np.arange(i, i+n)        return tuple([a[None, j:] for j in range(n)])    template = nump(n-1, k-1, i+1)    full = np.r_[np.repeat(np.arange(i, i+n-k+1),     [t.shape[1] for t in template])[None, :],      np.c_[template]]    return tuple([full[:, j:] for j in np.r_[0, np.add.accumulate(        [t.shape[1] for t in template[:-1]])]])def nump2(n, k):    a = np.ones((k, n-k+1), dtype=int)    a[0] = np.arange(n-k+1)    for j in range(1, k):        reps = (n-k+j) - a[j-1]        a = np.repeat(a, reps, axis=1)        ind = np.add.accumulate(reps)        a[j, ind[:-1]] = 1-reps[1:]        a[j, 0] = j        a[j] = np.add.accumulate(a[j])    return adef itto(L, N):    return np.array([a for a in itertools.combinations(L,N)]).Tk = 6n = 12N = np.arange(n)assert np.all(nump2(n,k) == itto(N,k))print('numpy    ', timeit.timeit('f(a,b)', number=100, globals={'f':nump, 'a':n, 'b':k}))print('numpy 2  ', timeit.timeit('f(a,b)', number=100, globals={'f':nump2, 'a':n, 'b':k}))print('itertools', timeit.timeit('f(a,b)', number=100, globals={'f':itto, 'a':N, 'b':k}))

时间:

k = 3, n = 50numpy     0.06967267207801342numpy 2   0.035096961073577404itertools 0.7981023890897632k = 3, n = 10numpy     0.015058324905112386numpy 2   0.0017436158377677202itertools 0.004743851954117417k = 6, n = 12numpy     0.03546895203180611numpy 2   0.00997065706178546itertools 0.05292179994285107


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

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

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