Все возможные матрицы порядка n с записями из диапазона python - PullRequest
0 голосов
/ 17 июня 2020

Я хочу написать функцию, в которой, учитывая два целых числа «n» и «p», она помещает все возможные матрицы порядка n, где элементы происходят из {0,1, ..., p-1}, в набор.

например: для n=2 и p=2 у нас есть:

[[0,0],[0,0]] , 

[[1,1],[1,1]] ,

[[1,0],[0,0]] , 

[[0,1],[0,0]] , 

[[0,0],[1,0]] , 

[[0,0],[0,1]] , 

[[1,1],[0,0]] , 

[[0,0],[1,1]] , 

[[1,1],[1,0]] , 

[[1,0],[1,1]] , 

[[1,1],[0,1]] , 

[[0,1],[1,1]] ,

[[0,1],[0,1]] , 

[[1,0],[1,0]] , 

[[0,1],[1,0]] , 

[[1,0],[0,1]] 

Позже я хочу проверить условие для определителя каждой матрицы и принять только те, с определитель равен 1 или 0.

Я не смог найти никаких функций в numpy, чтобы сделать трюк. заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Перестановки Itertools отлично подходят для этого. Первая строка перестановки сгенерирует список кортежей, содержащий каждую комбинацию из двух чисел из ваших двух диапазонов. Здесь будут дубликаты, которые вы можете проверить, набрав l и убедившись в этом сами.

Вы можете взять эти кортежи и создать с ними пары комбо, удалив дубликаты с помощью функции set, в результате чего в 16 комбинациях в этом примере.

from itertools import permutations
n = 2
p = 2

l = list(permutations([x for x in range(n)]+[y for y in range(p)],2))

set(permutations(l,2))

Вывод

{((0, 0), (0, 0)),
 ((0, 0), (0, 1)),
 ((0, 0), (1, 0)),
 ((0, 0), (1, 1)),
 ((0, 1), (0, 0)),
 ((0, 1), (0, 1)),
 ((0, 1), (1, 0)),
 ((0, 1), (1, 1)),
 ((1, 0), (0, 0)),
 ((1, 0), (0, 1)),
 ((1, 0), (1, 0)),
 ((1, 0), (1, 1)),
 ((1, 1), (0, 0)),
 ((1, 1), (0, 1)),
 ((1, 1), (1, 0)),
 ((1, 1), (1, 1))}
1 голос
/ 17 июня 2020

спасибо @Chris. У меня возникла эта идея, и она работает. проблема с ответом Криса заключалась в том, что он генерировал только 2 * 2 матрицы, и все мои попытки исправить это не увенчались успехом, как я уже упоминал о них в комментарии.

x = [y for y in range(p)]
a=[j for j in product(x, repeat=n)]
b={k for k in product(a, repeat=n)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...