如何解决如何在 Python 中生成相关的随机数?
如何创建一组 n 个维度为 d 的向量,使得元素具有相关性 c(即,如果一个向量有一个大元素,则其他元素可能很大)?
为了演示,假设 n=5、d=3 和 c=0.7。
有什么方法可以在这里设置转化:https://numpy.org/doc/stable/reference/random/generated/numpy.random.multivariate_normal.html
这可能问的太多了,但如果我想要从正态分布中提取的数字怎么办?
谢谢!
编辑:基本上我试图创建一个合成种群,其个体在某些潜在变量上有所不同,理想情况下,这个潜在变量将遵循正态分布。例如,心理测量 g 因子总结了多项测试的表现,并解释了在给定测试中人们之间的一定差异。所以我想创建维度为 d(任务数)的 n 个向量(人口大小),但也许 c 需要是 d 个数字的向量?我可能需要为潜在变量分数(例如 g)指定一个由 d 个数字组成的向量,或者这可能来自于如何创建个体向量?
解决方法
这可能是您要找的吗?
import numpy as np
def gen_random(n: int,d: int,covar: float) -> np.ndarray:
"""
Paramters
---------
n : int
number of samples generated
d : int
dimensionality of samples
covar : float
uniform covariance for samples
Returns
-------
samples : np.ndarray
samples in as (n,d)-matrix
"""
cov_mat = np.ones((d,d)) * covar; np.fill_diagonal(cov_mat,1)
offset = np.zeros(d)
return np.random.multivariate_normal(offset,cov_mat,size=n)
v = gen_random(n=10_000,d=3,covar=0.7)
print(v)
# [[ 0.03031736 0.18227023 -0.1302022 ]
# [-0.17770689 0.70979971 -0.74631702]
# [-0.78485455 -0.73942846 -0.04819704]
# ...
# [ 2.5928135 2.43727782 1.59459156]
# [ 0.33443158 -0.74126937 -0.7542286 ]
# [ 0.11238505 -0.1940429 0.7397402 ]]
# sanity check
print(np.corrcoef(v,rowvar=False))
# [[1. 0.6985444 0.69802535]
# [0.6985444 1. 0.70168241]
# [0.69802535 0.70168241 1. ]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。