楼主: henecia_bo
8624 6

[问答] 怎么生成二元正态混合分布的随机数?以0.7N(0,1)+0.3N(1,1)为例。 [推广有奖]

  • 0关注
  • 0粉丝

小学生

92%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
53 点
帖子
4
精华
0
在线时间
10 小时
注册时间
2014-9-4
最后登录
2016-9-24

楼主
henecia_bo 发表于 2015-4-14 09:33:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
怎么生成二元正态混合分布的随机数?最好以0.7N(0,1)+0.3N(1,1)为例?初学者求教!~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:混合分布 随机数 初学者求教 初学者 最好 初学者

沙发
hugebear 发表于 2015-4-14 10:58:49
设生成100个混合正态随机数,
  1. rnorm(100, mean = sample(c(0, 1), size = 100, prob = c(0.7, 0.3), replace = T), sd = 1)
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 15 热心帮助其他会员

总评分: 论坛币 + 15   查看全部评分

藤椅
hugebear 发表于 2015-4-14 11:09:50
更一般的情况,不同的component的方差也可以是相异的,例如要生成100个来自0.7N(0, 1) + 0.3N(1, 4)的随机数, 则使用以下代码:
  1. comp <- sample(c(0, 1), size = 100, prob = c(0.7, 0.3), replace = T)
  2. rnorm(100, mean = ifelse(comp == 0, 0, 1), sd = ifelse(comp == 0, 1, 2))
复制代码

板凳
henecia_bo 发表于 2015-4-15 14:05:31
hugebear 发表于 2015-4-14 11:09
更一般的情况,不同的component的方差也可以是相异的,例如要生成100个来自0.7N(0, 1) + 0.3N(1, 4)的随机数 ...
好哒~受教啦。谢谢,辛苦了~

报纸
Vickychai 发表于 2018-10-16 16:07:53
hugebear 发表于 2015-4-14 11:09
更一般的情况,不同的component的方差也可以是相异的,例如要生成100个来自0.7N(0, 1) + 0.3N(1, 4)的随机数 ...
你好,方便把具体参数的意义和用法告知一下么?谢谢了!

地板
赵安豆 发表于 2024-12-4 15:34:25
在Python中,我们可以使用numpy和scipy库来生成这样的二元正态混合分布的随机数。以下是一个示例代码:

```python
import numpy as np

# 设置随机种子以确保结果可复现
np.random.seed(0)

# 定义两个正态分布的参数
mu1, sigma1 = 0, 1
mu2, sigma2 = 1, 1

# 设定混合权重
w1, w2 = 0.7, 0.3

# 生成随机数的总数
n_samples = 1000

# 根据混合权重,决定从每个分布中抽取多少个样本
samples1 = np.random.normal(mu1, sigma1, int(n_samples * w1))
samples2 = np.random.normal(mu2, sigma2, int(n_samples * w2))

# 合并两个分布的样本
mixed_samples = np.concatenate((samples1, samples2))

# 为了确保总体数量正确,如果加权采样导致数量略有不同,则需要调整总数。
if len(mixed_samples) > n_samples:
    mixed_samples = mixed_samples[:n_samples]
elif len(mixed_samples) < n_samples:
    missing_samples = np.random.choice(mixed_samples, n_samples - len(mixed_samples))
    mixed_samples = np.concatenate((mixed_samples, missing_samples))

# 打乱顺序以确保混合分布的样本没有来自不同分布的模式
np.random.shuffle(mixed_samples)

print("生成的二元正态混合分布随机数:")
print(mixed_samples)
```

这段代码首先定义了两个正态分布(N(0,1) 和 N(1,1))以及它们的权重。接着,根据这些权重从每个分布中抽取样本,并将它们合并。最后,确保生成的总样本数量与预期相符,并打乱顺序以避免任何模式。

请注意,由于使用了随机函数,每次运行代码时生成的结果可能不同。设置随机种子(如本例中的np.random.seed(0))可以帮助确保结果在多次运行中保持一致。
```python
# 上面的代码示例应修改为中文注释和变量名以符合您的要求

import numpy as np

# 设置随机数生成器的种子,保证每次运行生成的结果相同
np.random.seed(0)

# 定义两个正态分布的参数:均值和标准差
平均值1, 标准差1 = 0, 1
平均值2, 标准差2 = 1, 1

# 设定混合权重,决定每个分布所占比例
权重1, 权重2 = 0.7, 0.3

# 定义要生成的随机数总量
样本总数 = 1000

# 按照设定的比例从两个正态分布中抽取样本
第一组样本 = np.random.normal(平均值1, 标准差1, int(样本总数 * 权重1))
第二组样本 = np.random.normal(平均值2, 标准差2, int(样本总数 * 权重2))

# 合并两个分布的样本
混合样本 = np.concatenate((第一组样本, 第二组样本))

# 调整总体数量以确保生成的样本数与预期一致
if len(混合样本) > 样本总数:
    混合样本 = 混合样本[:样本总数]
elif len(混合样本) < 样本总数:
    缺失样本 = np.random.choice(混合样本, 样本总数 - len(混合样本))
    混合样本 = np.concatenate((混合样本, 缺失样本))

# 打乱顺序以消除来自不同分布的模式
np.random.shuffle(混合样本)

print("生成的二元正态混合分布随机数:")
print(混合样本)
```

这段代码将根据您要求的中文变量名和注释进行修改。通过运行此代码,您可以得到一个符合0.7N(0,1)+0.3N(1,1)混合分布特性的随机数序列。
```

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



7
512661101 发表于 2025-5-20 10:27:36

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-9 06:43