我正在尝试生成一些(伪)随机列表以进行测试。在这里,我正在生成一个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()
,种子不断变化,但是输出在两个周期之间从未改变。
答案 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)
可以更改周期数和分辨率以获得理想的结果