在 Python 中构造具有从 1 到 n 的唯一值的 nxn 矩阵

Pra*_*rao 1 python arrays matrix python-3.x

我在 Python 中有两个列表

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

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

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

任何人都知道生成这样的矩阵吗?

矩阵

Dav*_*d S 6

您可以执行以下操作:

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)
Run Code Online (Sandbox Code Playgroud)

对于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]]
Run Code Online (Sandbox Code Playgroud)

如果值从 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)
Run Code Online (Sandbox Code Playgroud)

  • 我猜OP不希望“0”是他/她的矩阵。除了那个很棒的答案!+1 (2认同)