Как передать матрицу в виде списка векторов в декартовом произведении в python

66
6

Я пытаюсь создать комбинаторную матрицу из серии векторов. Если бы я хотел, чтобы все векторы были включены в комбинацию, я бы использовал:

CombinatoricsMatrix = list(itertools.product(vector1, vector2, ...)

или же

CombinatoricsMatrix  = cartesian((vector1, vector2))

такой, что если

vector1 = [a]
vector2 = [1,2]
CombinatoricsMatrix = cartesian((vector1, vector2))
CombinatoricsMatrix = [a,1; a,2]

Однако есть некоторые матрицы, которые я хочу передать как "список векторов", чтобы элементы этих векторов не были включены в комбинацию.

Например, если

matrix3 = [w,x; y,z]

желаемый выход

CombinatoricsMatrix  = cartesian((vector1, vector2, matrix3 ))
CombinatoricsMatrix = [a,1,[w,x]; a,1,[y,z]; a,2,[w,x]; a,2,[y,z]]

Есть идеи? Обратите внимание, что длина и количество векторов для примера были короткими.

спросил(а) 2016-08-07T21:30:00+03:00 3 года, 11 месяцев назад
1
Решение
93

Вероятнее всего, существуют более питонические способы сделать это, но одно решение - застегнуть матрицы так, чтобы

CombinatoricsMatrix  = list(itertools.product(vector1, vector2, zip(matrix3))

ответил(а) 2016-08-07T21:33:00+03:00 3 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема