Python 随机数生成器每次给出相同的值

Python random number generator giving the same value every time

我正在使用 Python 来解决抽样问题。部分问题要求矩阵的对角线填充为 '1' 或 '-1' 且两者概率相等。

我正在尝试使用 random.choice,如下所示,但我得到的列表总是只包含“1”或“-1”

k = 10 
diag = []   
for i in range(0,k):
    diag.append(random.choice((1,-1)))

我通过以下方式查看了不同点的播种:

random.seed(numpy.sin(time.clock()))

并在做出随机选择之前将种子放入 for 循环中,但我得到了相同的结果。

有没有人知道如何解决这个问题?

choice 方法接受一个 size 参数来生成给定长度的输出数组。你可以简单地这样做:

diag = np.diag(np.random.choice([-1,1], size=...)

你的措辞表明你想要一个矩阵,但你没有在任何地方指定非对角线元素应该是什么。假设在 [0,1) 中均匀分布,我们可以这样做:

import numpy as np

k = 5
X = np.random.rand(k, k)
X[np.diag_indices(k)] = np.random.choice((-1, 1), k)

给我:

[[-1.    0.95  0.73  0.60  0.16]
 [ 0.16  1.    0.87  0.60  0.71]
 [ 0.02  0.97 -1.    0.21  0.18]
 [ 0.18  0.30  0.52  1.    0.29]
 [ 0.61  0.14  0.29  0.37 -1.  ]]

将种子设置为 42 并四舍五入到小数点后两位。