我得到了以下代码:
import numpy as np
rand_draw1 = np.random.rand(5,4)
rand_draw2 = rand_draw1
rand_draw2[0:2,0:4] = np.random.rand(2,4)
我的意图是让变量 rand_draw1 和 rand_draw2 除前两行外完全相同。然而,它们完全相同,甚至前两行也是如此。
最初我认为这个问题回答了我的问题: Random Number Generation - Same Number returned 这表明这一定是由于这些随机抽取是基于机器时钟这一事实,并且由于命令是在几乎相同的实例中执行的,所以人们抽取了相同的数字。但如果是这样,为什么我在终端中运行它会得到相同的结果(即逐行输入)?
总而言之,我有两个问题: - 如何修复我的代码? - 是否确实是机器时间“问题”导致的?
提前致谢!
最佳答案
只是分配 rand_draw2 = rand_draw1
不会创建副本,它只是将名称 rand_draw2
绑定(bind)到相同的对象 已经绑定(bind)到 rand_draw1
:
>>> rand_draw2 = rand_draw1
>>> rand_draw2 is rand_draw1
True
相反,您需要显式复制 rand_draw1
,并将copy分配给rand_draw2
:
>>> rand_draw1 = np.random.rand(5, 4)
>>> rand_draw2 = rand_draw1.copy()
>>> rand_draw2[0:2] = np.random.rand(2, 4)
>>> rand_draw1
array([[ 0.08254004, 0.51848814, 0.69348487, 0.44053008],
[ 0.75273107, 0.64677024, 0.78397813, 0.12768647],
[ 0.37552669, 0.8365069 , 0.44490398, 0.3943413 ],
[ 0.27263619, 0.40379047, 0.43227555, 0.61552473],
[ 0.55214161, 0.21380748, 0.34122889, 0.44029075]])
>>> rand_draw2
array([[ 0.26229975, 0.02754367, 0.7989174 , 0.94619982],
[ 0.40869498, 0.01327566, 0.06437938, 0.94647506],
[ 0.37552669, 0.8365069 , 0.44490398, 0.3943413 ],
[ 0.27263619, 0.40379047, 0.43227555, 0.61552473],
[ 0.55214161, 0.21380748, 0.34122889, 0.44029075]])
参见例如here以很好地解释 Python 中的名称是如何工作的。
关于python - 在numpy中绘制相同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25076440/