np.gradient альтернатива в c ++ - PullRequest
0 голосов
/ 03 апреля 2020

Мне нужно написать функцию C ++, которая рассчитывает градиент массива, например np.gradient функция в numpy:

>>> 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. ])

Кто-нибудь знает, как это реализовать?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

В соответствии с документацией в 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)

, поэтому вы можете go по элементам от 1 до n-1 и рассчитать (f[i+1] - f[i-1]) / 2.0

для краев я считаю, что вы должны сделать:

f'[0] = f[1] - f[0]
f'[n] = f[n] = f[n-1]
0 голосов
/ 03 апреля 2020

сам реализовал очень простую функцию, так как этот вопрос слишком прост ...


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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...