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 并四舍五入到小数点后两位。
我正在使用 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 并四舍五入到小数点后两位。