【发布时间】:2019-03-04 13:13:17
【问题描述】:
我遇到了一个问题,尽管我在不同的计算机上获得了不同的随机数
-
scipy.__version__ == '1.2.1'在所有计算机上 -
numpy.__version__ == '1.15.4'在所有计算机上 -
random_stateseed 在每个生成随机数以获得可重复结果的函数调用中都固定为相同的数字 (42)
在此处完整发布代码有点复杂,但我注意到在从多元法线采样时结果开始出现分歧:
import numpy as np
from scipy import stats
seed = 42
n_sim = 1000000
d = corr_mat.shape[0] # corr_mat is a 15x15 correlation matrix, numpy.ndarray
# results diverge from here across different hardware
z = stats.multivariate_normal(mean=np.zeros(d), cov=corr_mat).rvs(n_sim, random_state=seed)
corr_mat 是一个相关矩阵(见下面的附录),在所有计算机上都是相同的。
我们正在测试的两台不同的计算机是
计算机 1
- 操作系统:Windows 7
- 处理器:Intel(R) Xeon(R) CPU E5-2623 v4 @ 2.60Ghz 2.60 Ghz(2 个处理器)
- 内存:64 GB
- 系统类型:64 位
计算机 2
- 操作系统:Windows 7
- 处理器:Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.10Ghz 2.10 Ghz(2 个处理器)
- 内存:64 GB
- 系统类型:64 位
附录
corr_mat
>>> array([[1. , 0.15, 0.25, 0.25, 0.25, 0.25, 0.1 , 0.1 , 0.1 , 0.25, 0.25,
0.25, 0.1 , 0.1 , 0.1 ],
[0.15, 1. , 0. , 0. , 0. , 0. , 0.15, 0.05, 0.15, 0.15, 0.15,
0. , 0.15, 0.15, 0.15],
[0.25, 0. , 1. , 0.25, 0.25, 0.25, 0.2 , 0. , 0.2 , 0.2 , 0.2 ,
0.25, 0.2 , 0.2 , 0.2 ],
[0.25, 0. , 0.25, 1. , 0.25, 0.25, 0.2 , 0. , 0.2 , 0.2 , 0.2 ,
0.25, 0.2 , 0.2 , 0.2 ],
[0.25, 0. , 0.25, 0.25, 1. , 0.25, 0.2 , 0. , 0.2 , 0.2 , 0.2 ,
0.25, 0.2 , 0.2 , 0.2 ],
[0.25, 0. , 0.25, 0.25, 0.25, 1. , 0.2 , 0. , 0.2 , 0.2 , 0.2 ,
0.25, 0.2 , 0.2 , 0.2 ],
[0.1 , 0.15, 0.2 , 0.2 , 0.2 , 0.2 , 1. , 0.15, 0.25, 0.25, 0.25,
0.2 , 0.25, 0.25, 0.25],
[0.1 , 0.05, 0. , 0. , 0. , 0. , 0.15, 1. , 0.15, 0.15, 0.15,
0. , 0.15, 0.15, 0.15],
[0.1 , 0.15, 0.2 , 0.2 , 0.2 , 0.2 , 0.25, 0.15, 1. , 0.25, 0.25,
0.2 , 0.25, 0.25, 0.25],
[0.25, 0.15, 0.2 , 0.2 , 0.2 , 0.2 , 0.25, 0.15, 0.25, 1. , 0.25,
0.2 , 0.25, 0.25, 0.25],
[0.25, 0.15, 0.2 , 0.2 , 0.2 , 0.2 , 0.25, 0.15, 0.25, 0.25, 1. ,
0.2 , 0.25, 0.25, 0.25],
[0.25, 0. , 0.25, 0.25, 0.25, 0.25, 0.2 , 0. , 0.2 , 0.2 , 0.2 ,
1. , 0.2 , 0.2 , 0.2 ],
[0.1 , 0.15, 0.2 , 0.2 , 0.2 , 0.2 , 0.25, 0.15, 0.25, 0.25, 0.25,
0.2 , 1. , 0.25, 0.25],
[0.1 , 0.15, 0.2 , 0.2 , 0.2 , 0.2 , 0.25, 0.15, 0.25, 0.25, 0.25,
0.2 , 0.25, 1. , 0.25],
[0.1 , 0.15, 0.2 , 0.2 , 0.2 , 0.2 , 0.25, 0.15, 0.25, 0.25, 0.25,
0.2 , 0.25, 0.25, 1. ]])
【问题讨论】:
-
您是否尝试过将百万法线转储到一个文件中并从两个平台对文件进行比较,而不是诸如相关性之类的间接措施,这可能有其自身平台相关的实现问题?跨度>
-
是的,这就是我最初所做的,这使我看到了上面的代码 - 差异显示两组普通 rv 在两台计算机上是不同的。但现在我不知道为什么。奇怪的是,我什至为
stats.multivariate_normal创建了一个较小尺寸 (2x2) corr matt 的测试,它在两台计算机上产生相同的结果。问题可能出在我上面的 15x15 corr_mat 上,但我已经检查过,两台计算机上都是一样的 -
从相关多正态抽样涉及我相信协方差矩阵的分解。我想这是你观察到的分歧的一个候选来源。
标签: python numpy random scipy hardware