python-在每行和每一列中产生一个随机数为1到9的数组

时间:2018-11-04 12:29:12

标签: python r

我目前有以下R代码:

m <- matrix(NA, nrow = 9, ncol = 9)
for (i in 1:9){
  m[i,] <- sample(9)
}

我是Python的新手,我希望重现此内容,但是每列中有1到9个随机样本,每行和每行都没有重复。谁能向我展示正确的路线?

1 个答案:

答案 0 :(得分:0)

您可以使用python的numpy库。

from numpy.random import randint

low = 1
high = 10
nrow = 9
ncol = 9

m = randint(low,high,size = (nrow,ncol))

print(m)


[[9 9 1 3 4 1 7 9 1]
 [8 1 2 9 1 6 5 6 1]
 [2 5 8 7 6 8 4 6 8]
 [7 1 8 7 4 8 1 3 2]
 [9 1 8 7 6 3 4 7 4]
 [5 8 2 4 5 9 8 6 3]
 [9 9 7 6 5 5 9 8 2]
 [3 3 5 5 3 1 8 9 5]
 [2 9 5 6 5 9 6 7 9]]

这将创建一个具有9行9列的numpy矩阵,其中将包含间隔为[low,high)的随机整数

您可以在以下位置查看该功能的手册: https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.random.randint.html

如果您希望每行都有唯一的值,则可以使用以下方法:

import numpy as np

m = np.zeros((9,9))
vals = np.arange(1,10)
for i in range(0,9):
    m[i,:] = np.random.choice(vals,size=9,replace=False)
print(m.astype(int))

[[8 9 4 3 6 1 7 5 2]
 [1 3 8 6 9 2 7 5 4]
 [4 1 9 6 8 2 7 5 3]
 [7 8 6 3 5 2 9 1 4]
 [3 8 7 9 5 4 2 1 6]
 [1 2 5 8 7 3 4 6 9]
 [8 5 4 9 1 3 6 7 2]
 [8 4 9 6 1 5 3 2 7]
 [3 2 4 5 6 1 8 9 7]]

要对每列执行相同操作,可以将for循环更改为此:

for i in range(0,9):
    m[:,i] = np.random.choice(vals,size=9,replace=False)