【问题标题】:Construct n x n matrix with unique value from 1 to n in Python在 Python 中构造具有从 1 到 n 的唯一值的 n x n 矩阵
【发布时间】:2020-05-09 08:06:35
【问题描述】:

我在 Python 中有两个列表

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

我想以这样一种方式创建一个矩阵,即每个单元格都应包含一个从1n 的值。单元格值在行和列中都应该是唯一的,并且每次应该生成不同的组合。

n=3 和任意 PD 大小均为 3 的示例输出如下所示。

有人知道生成这样的矩阵吗?

【问题讨论】:

  • 您可以从循环矩阵开始,遍历行和列的所有排列。我不确定是否可以通过这种方式枚举所有此类矩阵
  • 相关:click
  • 您正在寻找的是数独生成算法。希望这有助于geeksforgeeks.org/program-sudoku-generator/amp

标签: python arrays python-3.x matrix


【解决方案1】:

您可以执行以下操作:

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]]

对于从 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)

【讨论】:

  • 我猜 OP 不希望 0 是他/她的矩阵。除了那个很好的答案! +1
  • 这看起来像一个数独板但它很容易解决(因为我们只是移动每一行的位置)
【解决方案2】:

没有模块和模式的解决方案。 您可以在 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)

【讨论】:

  • 谢谢,但是这个解决方案只生成一个输出。我需要一个在每次运行时生成不同组合的解决方案,这是由上面大卫的解决方案提供的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
相关资源
最近更新 更多