Каков хороший способ получить комбинации индексов, которые указывают на уникальные элементы массива. Например, a = [1,1,3,2]
, возможный набор указателей будет {0,2,3}, {1,2,3}
.Декартовы продукты, чтобы получить набор индексов для указания на уникальные элементы в массиве NumPy
Я могу использовать argsort
в сочетании с расщеплением элементов по частоте, чтобы затем использовать что-то вроде itertools.product
, чтобы получить все наборы индексов, которые я хочу.
Это то, что я пробовал:
from numpy import array, split
from scipy.stats import itemfreq
from itertools import product
a = array([1,1,3,2])
fq = itemfreq(a)[:,1]
fq = [int(f + sum(fq[:i])) for i, f in enumerate(fq)]
print list(product(*(ptrs for ptrs in split(a.argsort(), fq) if len(ptrs))))
#> [(0, 3, 2), (1, 3, 2)]
Как я могу сделать это лучше?
На личном уровне используйте 'from numpy import array, split' вместо' from pylab import * '. – Veedrac