Прежде всего, вы делаете больше работы, чем вам нужно с вашей версией Python, просто используйте:
np.random.uniform(lower_bound, upper_bound, size=(num_particle, dim))
В вашей попытке C ++ строка
std::generate(pos.begin(),pos.end(),distribution(generator));
Неправильно, поскольку третий аргумент должен быть функцией, а не значением. Разумный эквивалент C ++ будет:
using RandomVector = std::vector<double>;
using RandomMatrix = std::vector<RandomVector>;
template <typename Generator=std::mt19937_64>
RandomMatrix&
fill_uniform(const double low, const double high, RandomMatrix& result)
{
Generator gen {static_cast<typename Generator::result_type>(time(0))};
std::uniform_real_distribution<double> dist {low, high};
for (auto& col : result) {
std::generate(std::begin(col), std::end(col), [&] () { return dist(gen); });
}
return result;
}
template <typename Generator=std::mt19937_64>
RandomMatrix
generate_uniform(const double low, const double high,
const std::size_t ncols, const std::size_t nrows)
{
RandomMatrix result(ncols, RandomVector(nrows));
return fill_uniform<Generator>(low, high, result);
}
int main()
{
auto m = generate_uniform(2, 11, 2, 3);
for (const auto& col : m) {
for (const auto& v : col) {
std::cout << v << " ";
}
std::cout << '\n';
}
}
Вы можете обобщить это для генерации тензоров произвольной размерности (например, версии NumPy) без особой работы.