numpy randint和rand的floor之间的区别是什么?

3
num_draws = int(1e6)
arr1 = np.random.randint(0, 10, num_draws)
arr2 = np.floor(10*np.random.rand(num_draws))

有numpy.random内部专业知识的人可以评论一下arr2是否遵循与arr1形式等价的统计学吗?在我所做的实验中,两个分布似乎具有相同的前几个矩,但这是迄今为止我所检查的全部内容。

1个回答

1

是的,它们是等价的 [1]

从源代码来看,它们都定义在辅助函数中 (1,2),这些函数引用基于数据大小的底层 C 调用 (1, 2)- 这两个函数都调用了 相同的底层函数

这个底层函数是一个32位的梅森旋转算法。在这个调用上面的所有内容都是移位和掩码来强制正确的数据类型,但它不会改变随机性的基本行为。


脚注

[1] 我假设您并不是在询问您的取整方法是否具有意外的统计副作用。这并不取决于numpy,但由于它们都使用相同的均匀统计设备,因此它们应该具有相同的偏差。我不会期望它们具有相同的性能。


感谢澄清。使用rand而不是randint会导致约10%的性能损失,但对我来说没问题 - 在某些情况下,“arr2”比“arr1”更自然地适用于问题。 - aph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接