令 U 为均匀分布随机数的方阵。然后,您可以将 U 的下三角部分与自身转置(仅包括对角线一次)相加,以获得与 U 具有相同分布的随机数的对称矩阵。
\n\nimport numpy as np \n\nU = np.random.uniform(low=0, high=1.0, size=(1000, 1000))\nS = np.tril(U) + np.tril(U, -1).T\n\nprint(np.histogram(S.flatten()))\nprint(np.histogram(S[0,:]))\nprint(np.histogram(S[:,0]))\nRun Code Online (Sandbox Code Playgroud)\n\n根据np.random.uniform的文档,整个矩阵以及任何行或列将均匀分布在 [0,1) 中
\n\n速度方面我得到
\n\n%timeit U = np.random.uniform(low=0, high=1.0, size=(1000, 1000))\n10.6 ms \xc2\xb1 46.5 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\n\n%timeit S = np.tril(U) + np.tril(U, -1).T\n5.76 ms \xc2\xb1 75.2 \xc2\xb5s per loop (mean \xc2\xb1 std. dev. of 7 runs, 100 loops each)\nRun Code Online (Sandbox Code Playgroud)\n\n正如其他人所指出的,你也可以这样做
\n\nS = (U + U.T) / 2\nRun Code Online (Sandbox Code Playgroud)\n\n获得对称性,但这将为您提供非对角线中的三角形分布随机数,因为您正在对两个均匀随机变量求和。
\n| 归档时间: |
|
| 查看次数: |
2910 次 |
| 最近记录: |