在Python中生成随机列表(种子问题?)

时间:2019-05-16 05:58:28

标签: python random

我正在尝试生成一些(伪)随机列表以进行测试。在这里,我正在生成一个2x2矩阵(列表列表),其中一个test_data.json文件具有任意数量的“循环”,而每个“周期”具有n(分辨率)个整数。

尝试了numpy和随机库中的一些基本random函数之后,我根本无法随机生成列表。

import json
import random as ran
import numpy as np
import os

resolution = 10 # Map resolution: Max = 200
cycles = 3 # Number of cycles
dist = [None for _ in range(resolution)] # Distance list
output = list()
n = 0

with open("test_data.json", "w") as test:
    for turn in range(cycles):
        n += 10
        # ran.seed(n)
        np.random.seed(n)
        for num in range(resolution):
            # dist[num] = int(ran.random() * 255)
            dist[num] = int(np.random.random() * 255)
        output.append(dist)
    # print(output)
    json.dump(output, test)
        # test.write('\n')

我可以处理一定范围内的任何“随机”输出(这里我将0-1缩放为0-255)。每个列表(cycle)中的数字都是足够随机的,但是每个cycle都是相同的数字列表。

[[164, 97, 169, 41, 245, 88, 252, 59, 149, 103], [164, 97, 169, 41, 245, 88, 252, 59, 149, 103], [164, 97, 169, 41, 245, 88, 252, 59, 149, 103]]

我尝试使用seed(),种子不断变化,但是输出在两个周期之间从未改变。

3 个答案:

答案 0 :(得分:3)

不要在每次迭代时都设置种子。种子的全部意义在于,给定的种子每次都会生成相同的数字流。在程序开始时设置一次种子(以使每次运行获得相同的结果),或者根本不设置种子。在后一种情况下,将为您生成时间相关的初始状态,从而使生成器确实显得随机。

此外,选择要使用python内置的random模块还是np.random。您可能不想同时使用两者。尤其是如果您要播种的话。一个的种子不会影响另一个。

答案 1 :(得分:2)

为什么不去除种子,只需使用

import random as ran

ran.randint(0, 256)

生成0-255范围内的随机数?

答案 2 :(得分:0)

您可以通过仅使用随机变量来解决此问题

import random

cycles = 3
resolution = 10
output = [[random.randint(0,256) for _ in range(resolution)] for _ in range(cycles)]

这将给出如下输出:

[[130, 126, 153, 18, 58, 24, 184, 75, 14, 25], [215, 73, 2, 58, 170, 255, 34, 113, 83, 80], [82, 100, 0, 118, 181, 90, 113, 165, 57, 87]]

然后您可以将输出转储到文件

open("test_data.json", "w") as test:
      json.dump(output, test)

可以更改周期数和分辨率以获得理想的结果