根据概率抽样numpy
时间: 2024-09-06 17:02:33 浏览: 41
numpy入门技术指导手册
在NumPy中,虽然它的核心功能并不包括概率抽样,但是结合其他统计库如Pandas和scipy.stats,我们可以实现基于概率的抽样。比如,如果你想进行分层随机抽样、系统抽样或者是基于某个概率分布的随机数生成,可以按照以下步骤操作:
1. **分层抽样**:如果你的数据有明显的分层结构,可以先将数据分为几层,然后在每层中按比例抽取样本。例如,使用Pandas的`sample`函数结合条件筛选,给定每个层次的权重。
```python
import pandas as pd
from scipy.stats import hypergeom
# 假设df是一个DataFrame,有两列'thing'表示类别,'value'表示值
grouped = df.groupby('thing')
samples_per_layer = grouped.sample(n=desired_samples, replace=True, weights='value', random_state=42)
```
2. **简单随机抽样**:如果没有特殊条件,可以使用`random.choice`结合`numpy.random.rand`来从总体中随机选择一定数量的样本。
```python
import numpy as np
sample_indices = np.random.choice(df.index, size=n_samples, replace=True, p=None) # 如果想按某种概率分布选样,传入对应的概率列表作为p
selected_samples = df.iloc[sample_indices]
```
3. **泊松抽样**:若需要满足特定的概率分布(如泊松分布),可以利用相应的统计方法生成指定数量的随机整数。
```python
import numpy.random as npr
lambda_ = ... # 泊松分布的平均数
draws = npr.poisson(lam=lambda_, size=n_samples)
sampled_indices = np.arange(len(df))[npr.choice(np.arange(len(df)), size=draws, replace=True)]
```
阅读全文