【问题标题】:Python random number generator giving the same value every timePython随机数生成器每次都给出相同的值
【发布时间】:2021-03-01 00:15:48
【问题描述】:

我正在使用 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 循环中,但我得到了相同的结果。

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

【问题讨论】:

  • 永远不要将播种放在for 循环中。始终在循环外播种一次。您正在从时钟播种,循环将在时钟再次滴答之前执行,因此它将重置为相同的种子。

标签: python-3.x random random-seed


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您的措辞表明您需要一个矩阵,但您没有在任何地方指定非对角元素应该是什么。假设均匀分布在 [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,并四舍五入到小数点后 2 位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多