在C ++中是否有类似numpy.logspace的东西?

use*_*965 2 c++

就像标题所说的那样,我正在寻找一些生成日志空间值的函数,就像numpy.logspace一样,但是要使用python。有想法吗?

Erb*_*ica 5

标准库中没有此类功能,但是,您可以轻松编写自己的函数。由于C ++和Python的不同性质,其功能将不完全相同。我建议使用生成器样式的函数对象:

template<typename T>
class Logspace {
private:
    T curValue, base;

public:
    Logspace(T first, T base) : curValue(first), base(base) {}

    T operator()() {
        T retval = curValue;
        curValue *= base;
        return retval;
    }
};
Run Code Online (Sandbox Code Playgroud)

用法示例(40个值,以2为底,从1开始):

std::vector<double> vals;
std::generate_n(std::back_inserter(vals), 40, Logspace<double>(1,2));
Run Code Online (Sandbox Code Playgroud)

评论示例解决方案:

std::vector<double> pyLogspace(double start, double stop, int num = 50, double base = 10) {
    double realStart = pow(base, start);
    double realBase = pow(base, (stop-start)/num);

    std::vector<double> retval;
    retval.reserve(num);
    std::generate_n(std::back_inserter(retval), num, Logspace<double>(realStart,realBase));
    return retval;
}
Run Code Online (Sandbox Code Playgroud)

示例实现 generate_while

template<typename Value, typename OutputIt, typename Condition, typename Generator>
void generate_while(OutputIt output, Condition cond, Generator g) {
    Value val;
    while(cond(val = g())) {
        *output++ = val;
    }
}
Run Code Online (Sandbox Code Playgroud)