Матрица перестановок — это матрица, полученная путем перестановки строк идентичной матрицы dxd в соответствии с некоторой перестановкой чисел от 1 до d. Таким образом, каждая строка и столбец содержит ровно одну единицу с нулями повсюду.
например, для 2x2 [[1,0],[0,1]] и [[0,1],[1,0]] удовлетворяют этому требованию, а [[1,1],[0,0]]] и т. д. — нет, поэтому я надеюсь, что это не повторяющийся вопрос. У меня есть код, который делает это, и мой тест заключается в том, что мне нужно было d! матрицы. Когда я доберусь до 11, я должен получить 11! матрицы, но получаю сообщение об ошибке, что мой код завершает работу из-за потери памяти. Я надеюсь, что у кого-то есть более эффективный способ решения этой проблемы, поскольку я хотел бы перейти к более крупным простым числам;
Код: Выделить всё
import math
import numpy as np
import cmath
from sympy.utilities.iterables import multiset_permutations
from itertools import permutations, chain
from pprint import pprint
from numpy import ndarray
from numpy import linalg as LA
d=5
print("Prime dimension",d)
a=[1]+[0 for _ in range(d-1)]
N=[]
P=[]
Pdagger=[]
for p in multiset_permutations(a):
N.append(p)
#Generate a list of ALL the permutation matrices including Identity (last)
for n in multiset_permutations(N):
n
P.append(n)
print(len(P))
Подробнее здесь: https://stackoverflow.com/questions/497 ... -in-python
Мобильная версия