为了账号安全,请及时绑定邮箱和手机立即绑定

为什么使用 Numba xoroshiro128p 得到与随机数组相同的数字?

为什么使用 Numba xoroshiro128p 得到与随机数组相同的数字?

紫衣仙女 2023-07-05 10:04:11
为什么我使用 Numba 得到与随机数组相同的数字xoroshiro128p?我想要与 Numpy 随机数组相同np.random.rand。from numba import cudafrom numba.cuda.random import create_xoroshiro128p_states, xoroshiro128p_uniform_float32import numpy as np@cuda.jitdef rand_array(rng_states, out):    thread_id = cuda.grid(1)    x = xoroshiro128p_uniform_float32(rng_states, thread_id)    out[thread_id] = xthreads_per_block = 4blocks = 3 rng_states = create_xoroshiro128p_states(threads_per_block * blocks, seed=1)out = np.zeros(threads_per_block * blocks, dtype=np.float32)rand_array[blocks, threads_per_block](rng_states, out)rar = np.random.rand(12).reshape(blocks, threads_per_block)print(out.reshape(blocks,threads_per_block))print()print(rar.reshape(blocks,threads_per_block))每次运行它时,我都会看到相同的数字。但np.random.rand效果很好。预先感谢您的帮助!
查看完整描述

1 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

发送种子=1,几乎可以肯定意味着随机数生成器(毕竟只是一个复杂的算法)在序列中完全相同的位置开始。因此生成相同的随机数序列。

以完全可预测的方式生成相同序列的能力在测试中非常有用,但在生产环境中,您需要更不可预测的种子

尝试 :

rng_states = create_xoroshiro128p_states(threads_per_block * blocks, seed=time.time())

由于时钟时间是不可预测的,因此序列将从不同的点开始生成,并且 rng_states 将远不可预测。显然,您需要import time在脚本开始时这样做。显然,这意味着您的代码现在每次都会生成一个随机序列,这将使测试变得困难。


查看完整回答
反对 回复 2023-07-05
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信