python numpy随机数生成器:我用了同样的种子,但我得到的不是同样的数字序列?

nc1teljy  于 2023-09-29  发布在  Python
关注(0)|答案(2)|浏览(125)

我用模拟数据(高程)生成多个网格,作为其中的一部分,我从选择点添加或减去高程(根据与中心点的距离的函数)。我希望我修改数据的点序列(中心点)对于每个网格都是相同的,但它们在哪里并不重要,所以我只是从均匀分布中选择随机点。然而,即使有一组种子,我还是会得到不同的中心点序列?一定是一些简单的东西,我只是错过了,但我看不到。所以请帮帮忙?
配对代码示例:

import numpy as np

seed = 3;
rn_gen = np.random.default_rng(seed=seed);
size = 10

for grid in [1, 2]:
    center_x = rn_gen.integers(1, high=100, size = size, endpoint = True);
    center_y = rn_gen.integers(1, high=100, size = size, endpoint = True);
    print("x:", center_x, "y:", center_y);

我总是得到同样的答案:
x:[82 9 18 24 19 81 87 59 4 10] y:[34 44 63 48 27 16 70 74 4 12]
x:[46 40 89 52 43 44 67 59 18 74] y:电话:0755 - 86667087传真:0755 - 86667087
但为什么第二个x和y和第一个不一样呢
[P.S.实际上,这是在计算“区域”(网格节点ID的阵列)的函数内编写的,该函数被传递到处理修改该区域中的数据的不同函数),例如下面给出,如果函数推断出我的问题]。

import numpy as np

seed = 3;
rn_gen = np.random.default_rng(seed=seed);
size = 10

def function1(size):
    center_x = rn_gen.integers(1, high=100, size = size, endpoint = True);
    center_y = rn_gen.integers(1, high=100, size = size, endpoint = True);
    
    return (center_x, center_y)
    

for grid in [1, 2]:
    xs_ys = function1(size); 
    print(xs_ys);

输出=
(array([82,9,18,24,19,81,87,59,4,10],dtype=int64),array([34,44,63,48,27,16,70,74,4,12],dtype =int64))(array([46,40,89,52,43,44,67,59,18,74],dtype=int64),dtype=int64),array([76,96,79,29,32,65,66,70,87,30],dtype=int64))
谢谢你,谢谢
我尝试使用numpy的随机数生成器(uniform)重复生成相同的随机数序列,但由于某种原因,它不会生成相同的随机数序列,尽管我设置了一致的种子,我不确定我错在哪里?

2skhul33

2skhul331#

当您调用rn_gen.integers时,随机生成器的内部状态会发生变化。因此,对rn_gen.integers的额外调用将从您结束的状态继续(这将生成不同的数字)。
如果你想生成相同的数字,请再次初始化随机数生成器:

import numpy as np

seed = 3
size = 10

def function1(size):
    rn_gen = np.random.default_rng(seed=seed)
    center_x = rn_gen.integers(1, high=100, size=size, endpoint=True)
    rn_gen = np.random.default_rng(seed=seed)
    center_y = rn_gen.integers(1, high=100, size=size, endpoint=True)

    return center_x, center_y

for _ in range(2):
    xs_ys = function1(size)
    print(xs_ys)

图纸:

(array([82,  9, 18, 24, 19, 81, 87, 59,  4, 10]), array([82,  9, 18, 24, 19, 81, 87, 59,  4, 10]))
(array([82,  9, 18, 24, 19, 81, 87, 59,  4, 10]), array([82,  9, 18, 24, 19, 81, 87, 59,  4, 10]))
e0uiprwp

e0uiprwp2#

没关系我解决了!我想是因为我在函数的其他地方使用了rng,所以它没有重置,所以它是在继续序列,而不是从头开始再次获得相同的x和y?类似的东西,无论如何,我只需要重做rn_gen = np.random.default(seed=seed)就在代码之前,以获得中心x和中心y

相关问题