从 Python 中具有不同概率的两个高斯分布中抽样
Sampling from two Gaussian distributions with different probability in Python
我正在尝试从 2 个不同的高斯分布生成 100 个样本,这样 G1 的出现概率为 0.7,G2 的出现概率为 0.3。我有以下代码片段:
from scipy.stats import norm
import numpy as np
x = [norm.rvs(0, 1, size=5), norm.rvs(10, 1, 5)]
draw = np.random.choice([0, 1], 100, p=[0.7, 0.3])
y = [x[i].rvs() for i in draw]
z = np.array(y)
当我编译它时,出现以下错误:
AttributeError: 'numpy.ndarray' object has no attribute 'rvs'
有什么我想念的吗?或者,是否存在根本性缺陷?
在这一行
x = [norm.rvs(0, 1, size=5), norm.rvs(10, 1, 5)]
您正在创建两个随机值数组。所以在这一行
[x[i].rvs() for i in draw]
你不能使用它们来创建更多随机值 (.rvs
),因为你有 numpy 数组:
norm.rvs(0, 1, size=5)
# Out: array([-1.61758314, 1.19288111, -0.55599284, -0.17926848, -0.78759 ])
您想创建一个正态分布对象列表,然后使用它从中抽取随机值:
x = [norm(0, 1), norm(10, 1)]
draw = np.random.choice([0, 1], 100, p=[0.7, 0.3])
y = [x[i].rvs() for i in draw]
我正在尝试从 2 个不同的高斯分布生成 100 个样本,这样 G1 的出现概率为 0.7,G2 的出现概率为 0.3。我有以下代码片段:
from scipy.stats import norm
import numpy as np
x = [norm.rvs(0, 1, size=5), norm.rvs(10, 1, 5)]
draw = np.random.choice([0, 1], 100, p=[0.7, 0.3])
y = [x[i].rvs() for i in draw]
z = np.array(y)
当我编译它时,出现以下错误:
AttributeError: 'numpy.ndarray' object has no attribute 'rvs'
有什么我想念的吗?或者,是否存在根本性缺陷?
在这一行
x = [norm.rvs(0, 1, size=5), norm.rvs(10, 1, 5)]
您正在创建两个随机值数组。所以在这一行
[x[i].rvs() for i in draw]
你不能使用它们来创建更多随机值 (.rvs
),因为你有 numpy 数组:
norm.rvs(0, 1, size=5)
# Out: array([-1.61758314, 1.19288111, -0.55599284, -0.17926848, -0.78759 ])
您想创建一个正态分布对象列表,然后使用它从中抽取随机值:
x = [norm(0, 1), norm(10, 1)]
draw = np.random.choice([0, 1], 100, p=[0.7, 0.3])
y = [x[i].rvs() for i in draw]