【问题标题】:np.gradient alternative in c++c++ 中的 np.gradient 替代方案
【发布时间】:2020-04-02 22:13:59
【问题描述】:

我需要编写一个 C++ 函数来计算数组的梯度,例如 numpy 中的 np.gradient 函数:

>>> f = np.array([1, 2, 4, 7, 11, 16], dtype=float)
>>> np.gradient(f)
array([1. , 1.5, 2.5, 3.5, 4.5, 5. ])

有人知道怎么实现吗?

【问题讨论】:

    标签: python c++ numpy gradient


    【解决方案1】:

    我自己实现了一个非常简单的功能,因为这个问题太简单了......

    
    vector<double> gradient(vector<double> input){
        if (input.size() <= 1) return input;
        vector<double> res;
        for(int j=0; j<input.size(); j++) {
            int j_left = j - 1;
            int j_right = j + 1;
            if (j_left < 0) {
                j_left = 0; // use your own boundary handler
                j_right = 1;
            }
            if (j_right >= input.size()){
                j_right = input.size() - 1;
                j_left = j_right - 1;
            }
            // gradient value at position j
            double dist_grad = (input[j_right] - input[j_left]) / 2.0;
            res.push_back(dist_grad);
        }
        return res;
    }
    

    【讨论】:

      【解决方案2】:

      根据https://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html中的文档

      f'[x] = (f[x+1] - f[x-1]) / 2.0*h + o(h^2)
      

      这样您就可以遍历从1n-1 的元素并计算(f[i+1] - f[i-1]) / 2.0

      对于边缘,我相信你必须这样做:

      f'[0] = f[1] - f[0]
      f'[n] = f[n] = f[n-1]
      

      【讨论】:

        猜你喜欢
        • 2018-02-06
        • 2011-08-24
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多