N-D version of itertools.combinations in numpy

前端 未结 4 1253
臣服心动
臣服心动 2020-12-01 12:18

I would like to implement itertools.combinations for numpy. Based on this discussion, I have a function that works for 1D input:

def combs(a, r):
    \"\"\"         


        
4条回答
  •  天命终不由人
    2020-12-01 12:54

    When r = k = 2, you can also use numpy.triu_indices(n, 1) which indexes upper triangle of a matrix.

    idx = comb_index(5, 2)
    

    from HYRY's answer is equivalent to

    idx = np.transpose(np.triu_indices(5, 1))
    

    but built-in, and a few times faster for N above ~20:

    timeit comb_index(1000, 2)
    32.3 ms ± 443 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
    
    timeit np.transpose(np.triu_indices(1000, 1))
    10.2 ms ± 25.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    

提交回复
热议问题