gpt4 book ai didi

matlab - 在 numpy 中实现与 matlab 相同的随机数

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:28 25 4
gpt4 key购买 nike

我想知道如何在 numpy 中生成与在 MATLAB 中相同的随机数(正态分布)。

作为我在 MATLAB 中执行此操作的示例

RandStream.setGlobalStream(RandStream('mt19937ar','seed',1));
rand
ans =
0.417022004702574

现在我可以用 numpy 重现这个:

import numpy as np
np.random.seed(1)
np.random.rand()
0.417022004702574

这很好,但是当我使用正态分布执行此操作时,我会得到不同的数字。

RandStream.setGlobalStream(RandStream('mt19937ar','seed',1));
randn
ans =
-0.649013765191241

还有 numpy

import numpy as np
np.random.seed(1)
np.random.randn()
1.6243453636632417

这两个函数在它们的文档中都说它们是从标准正态分布中提取的,但给出了不同的结果。知道如何调整我的 python/numpy 以获得与 MATLAB 相同的数字。

因为有人将其标记为重复:正如我在开头和结尾所写的,这是关于正态分布的。正如我所写的,均匀分布工作正常,这是关于正态分布的。链接线程中的答案均无助于正常分发。

最佳答案

我的猜测是 matlab 和 numpy 可能使用不同的方法来获得随机数的正态分布(以某种方式从均匀数中获得)。

您可以通过编写一个 box-muller 方法来自己生成随机数来避免这个问题。对于 python ,

import numpy as np

# Box-muller normal distribution, note needs pairs of random numbers as input
def randn_from_rand(rand):

assert rand.size == 2

#Use box-muller to get normally distributed random numbers
randn = np.zeros(2)
randn[0] = np.sqrt(-2.*np.log(rand[0]))*np.cos(2*np.pi*rand[1])
randn[1] = np.sqrt(-2.*np.log(rand[0]))*np.sin(2*np.pi*rand[1])

return randn


np.random.seed(1)
r = np.random.rand(2)
print(r, randn_from_rand(r))

这给出了,

(array([ 0.417022  ,  0.72032449]), array([-0.24517852, -1.29966152]))

对于 matlab,

% Box-muller normal distribution, note needs pairs of random numbers as input
function randn = randn_from_rand(rand)

%Use box-muller to get normally distributed random numbers
randn(1) = sqrt(-2*log(rand(1)))*cos(2*pi*rand(2));
randn(2) = sqrt(-2*log(rand(1)))*sin(2*pi*rand(2));

我们称之为

RandStream.setGlobalStream(RandStream('mt19937ar','seed',1));
r = [rand, rand]
rn = randn_from_rand(r)

有答案,

r =
0.4170 0.7203
rn =
-0.2452 -1.2997

请注意,您可以检查输出是否呈正态分布,对于 python,

import matplotlib.pyplot as plt

ra = []
np.random.seed(1)
for i in range(1000000):
rand = np.random.rand(2)
ra.append(randn_from_rand(rand))


plt.hist(np.array(ra).ravel(),100)
plt.show()

这给出了,

enter image description here

关于matlab - 在 numpy 中实现与 matlab 相同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com