Я использую itertools.combinations()
следующим образом:Быстрое numpy-решение вместо itertools.combinations?
import itertools
import numpy as np
L = [1,2,3,4,5]
N = 3
output = np.array([a for a in itertools.combinations(L,N)]).T
что дает мне выход мне нужно:
array([[1, 1, 1, 1, 1, 1, 2, 2, 2, 3],
[2, 2, 2, 3, 3, 4, 3, 3, 4, 4],
[3, 4, 5, 4, 5, 5, 4, 5, 5, 5]])
Я использую это выражение неоднократно и чрезмерно в среде многопроцессорной и мне нужно, чтобы быть как можно быстрее.
От this post Я понимаю, что itertools
основанного кода не является самым быстрым решением и использование numpy
может быть улучшением, однако я не достаточно хорошо numpy
optimazation уловок, чтобы понять и адаптировать повторяющийся код, который там написан или придумайте мою собственную оптимизацию.
Любая помощь была бы принята с благодарностью.
EDIT:
L
происходит от панд dataframe, так что он может так же рассматриваться как Numpy массива:
L = df.L.values
Для 2D вы бы 'numpy.triu_in dices', но более высокие размеры сложнее –
Как насчет ['sklearn.utils.extmath.cartesian'] (https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/utils/extmath. ру # L557)? – blacksite
До сих пор я не изучал 'scikit-learn', я буду читать. – Khris