我用模拟数据(高程)生成多个网格,作为其中的一部分,我从选择点添加或减去高程(根据与中心点的距离的函数)。我希望我修改数据的点序列(中心点)对于每个网格都是相同的,但它们在哪里并不重要,所以我只是从均匀分布中选择随机点。然而,即使有一组种子,我还是会得到不同的中心点序列?一定是一些简单的东西,我只是错过了,但我看不到。所以请帮帮忙?
配对代码示例:
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)重复生成相同的随机数序列,但由于某种原因,它不会生成相同的随机数序列,尽管我设置了一致的种子,我不确定我错在哪里?
2条答案
按热度按时间2skhul331#
当您调用
rn_gen.integers
时,随机生成器的内部状态会发生变化。因此,对rn_gen.integers
的额外调用将从您结束的状态继续(这将生成不同的数字)。如果你想生成相同的数字,请再次初始化随机数生成器:
图纸:
e0uiprwp2#
没关系我解决了!我想是因为我在函数的其他地方使用了rng,所以它没有重置,所以它是在继续序列,而不是从头开始再次获得相同的x和y?类似的东西,无论如何,我只需要重做rn_gen = np.random.default(seed=seed)就在代码之前,以获得中心x和中心y