c++ 均匀采样随机数
时间: 2023-11-03 10:53:09 浏览: 148
您好!要生成均匀分布的随机数,您可以使用C语言中的rand()函数结合一些其他函数来实现。请参考以下示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
// 使用当前时间初始化随机数种子
srand(time(NULL));
// 生成均匀分布的随机数
int randomNum = rand();
printf("随机数:%d\n", randomNum);
return 0;
}
```
上述代码中,我们首先使用time()函数获取当前时间作为随机数种子,然后通过srand()函数将种子传递给rand()函数。最后,使用rand()函数生成一个均匀分布的随机数,并打印出来。
希望以上信息对您有所帮助!如果还有其他问题,请继续提问。
相关问题
c++ vector 随机不放回采样
C++中的vector是一个动态数组容器,可以存储不同类型的元素。它提供了一系列的成员函数和操作符,方便对数组进行操作和管理。
随机不放回采样是指从一个集合中随机选择若干个元素,选中的元素不再放回集合中。在C++中,可以使用随机数生成器和vector的相关函数来实现随机不放回采样。
以下是一种实现随机不放回采样的方法:
1. 首先,包含必要的头文件:
```cpp
#include <iostream>
#include <vector>
#include <random>
```
2. 创建一个随机数生成器对象:
```cpp
std::random_device rd; // 用于获取随机种子
std::mt19937 gen(rd()); // 使用Mersenne Twister引擎作为随机数生成器
```
3. 定义一个函数来进行随机不放回采样:
```cpp
std::vector<int> randomSampling(const std::vector<int>& data, int sampleSize) {
std::vector<int> result;
std::vector<int> indices(data.size());
std::iota(indices.begin(), indices.end(), 0); // 初始化indices为0到data.size()-1的序列
std::uniform_int_distribution<> dis(0, indices.size() - 1); // 创建一个均匀分布的随机整数生成器
for (int i = 0; i < sampleSize; ++i) {
int index = dis(gen); // 生成一个随机索引
result.push_back(data[indices[index]]); // 将对应索引的元素加入结果集合
indices.erase(indices.begin() + index); // 移除已选中的索引
}
return result;
}
```
4. 调用函数进行随机不放回采样:
```cpp
int main() {
std::vector<int> data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sampleSize = 5;
std::vector<int> sampledData = randomSampling(data, sampleSize);
for (int num : sampledData) {
std::cout << num << " ";
}
return 0;
}
```
运行以上代码,将会从data中随机选择5个元素进行采样,并输出结果。
阅读全文