Построить матрицу nxn с уникальным значением от 1 до n в Python - PullRequest
1 голос
/ 09 мая 2020

У меня есть два списка в Python

P = [P1, P2 ..... Pn], D = [D1, D2 ..... Dn].

Я хочу создать матрицу таким образом, чтобы каждая ячейка содержала значение из 1 на n. Значение ячейки должно быть уникальным как в строке, так и в столбце, и каждый раз оно должно генерировать разные комбинации.

Ниже показан пример выходных данных для n=3 и произвольных P и D обоих размера 3.

Кто-нибудь знает, как создать такую ​​матрицу?

матрица n x n

Ответы [ 2 ]

5 голосов
/ 09 мая 2020

Вы можете сделать следующее:

import random

def createMatrix(n):
    firstRow = random.sample(range(n),n)
    permutes = random.sample(range(n),n)
    return list(firstRow[i:]+firstRow[:i] for i in permutes)


N = 5
m = createMatrix(N)
print(m)

Что для случая N=5 дает (после преобразования в numpy массив для печати):

[[4 0 1 2 3]
 [1 2 3 4 0]
 [3 4 0 1 2]
 [0 1 2 3 4]
 [2 3 4 0 1]]

In в случае значений, начинающихся с 1, поправка к функции:

def createMatrix(n):
    firstRow = random.sample(range(1, n + 1),n)
    permutes = random.sample(range(1, n + 1),n)
    return list(firstRow[i:]+firstRow[:i] for i in permutes)
0 голосов
/ 09 мая 2020

Решение без модулей и по выкройке. Вы можете ввести все, что хотите в P1, и получите матрицу

P1 = list(range(1, 101))

matrix_len = len(P1)
w, h = matrix_len, matrix_len
matrix = [[None for x in range(w)] for y in range(h)]
counter=0
for i in range(matrix_len):
    for j in range(matrix_len):
        matrix[counter][j] = i
        counter +=1
        if counter == matrix_len:
            counter= 0
    counter +=1

print(matrix)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...