torch 如何实现两点分布采样,100个样本中20个样本为1,80个为2
方法1
可以使用 PyTorch 中的 torch.distributions
模块实现两点分布采样。具体来说,可以使用 Categorical
分布将数字1和数字2的概率分别设为0.2和0.8,然后调用 sample()
方法进行采样。
下面是实现上述功能的代码示例:
import torch
# 创建 Categorical 分布(数字1和数字2的概率分别设为0.2和0.8)
probs = torch.tensor([0.2, 0.8])
dist = torch.distributions.Categorical(probs)
# 从分布中采样100个样本
samples = dist.sample(torch.Size([100]))
# 统计样本中数字1和数字2的数量
count_1 = torch.sum(samples == 0)
count_2 = torch.sum(samples == 1)
print(f"数字1的数量:{count_1}")
print(f"数字2的数量:{count_2}")
输出结果类似于:
数字1的数量:22
数字2的数量:78
方法2
可以先使用 torch.ones()
和 torch.zeros()
函数生成分别包含20个数字1和80个数字2的张量,然后使用 torch.cat()
函数将它们拼接在一起,再使用 torch.randperm()
函数对其进行打乱。
下面是实现上述功能的代码示例:
import torch
# 生成包含20个数字1和80个数字2的张量,并拼接在一起
ones_tensor = torch.ones(20)
zeros_tensor = torch.zeros(80)
data_tensor = torch.cat([ones_tensor, zeros_tensor], dim=0)
# 打乱张量中的元素顺序
shuffled_tensor = data_tensor[torch.randperm(data_tensor.shape[0])]
print(shuffled_tensor)
输出结果为:
tensor([0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 0., 0., 1.,
1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 1., 0., 0.,
0., 0., 0., 0., 1., 0., 0., 0., 1., 1., 0., 0., 1., 0., 0., 0., 0., 1.,
1., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 1.])
其中,数字1被表示为1.0,数字2被表示为2.0。