У меня есть N 10-мерных векторов, где каждый элемент может иметь значение 0,1 или 2. Например, vector v=(0,1,1,2,0,1,2,0,1,1)
является одним из векторов. Есть ли алгоритм (желательно на python), который сжимает эти векторы в минимальное количество декартовых произведений. Если это не идеальное решение, есть алгоритм, который, по крайней мере, дает хорошее сжатие.Сжатие векторов в декартовых изделиях
Пример: два "декартовы векторы" ([1,2], 0, 1, 0, 0, 0, 1, 1, [0,1], 0])
(дает 4 векторов) и (0, 1, 0, 2, 0, 0, [0,2], 2, 0, 1)
(дает 2 векторов) дает оптимальное решение для векторов N = 6:
1,0,1,0,0,0,1,1,0,0
2,0,1,0,0,0,1,1,0,0
1,0,1,0,0,0,1,1,1,0
2,0,1,0,0,0,1,1,1,0
0,1,0,2,0,0,0,2,0,1
0,1,0,2,0,0,2,2,0,1
Вы смотрели на [ 'numpy'] (http://docs.scipy.org/ doc/numpy/index.html) и ['scipy'] (http://docs.scipy.org/doc/scipy/reference/)? – MattDMo
Возможно, [itertools.product] (https://docs.python.org/2/library/itertools.html#itertools.product) может вам помочь. – Evert
itertools.product, кажется, создает векторы из заявленных декартовых продуктов, где я хотел бы пойти наоборот. Может быть полезно использовать в алгоритме. –