Numpy gradient с неравномерным интервалом

У меня что-то не так:

import numpy as np
import matplotlib.pyplot as plt

x  = np.concatenate((np.linspace(0,1,100),np.linspace(1,2,50)));
f  = np.power(x,2);
df = 2*x;
Df = np.gradient(f,x);
plt.plot(x,df,'r', x,Df,'b');plt.show()

Вот что я получаю:

Numpy gradient с неравномерным интервалом

В противном случае все работает нормально, если используется линейно разнесенный массив и не используется аргумент x.

Какие-либо предложения?

Какой желаемый результат?

Paul Brodersen 25.05.2018 15:41

Я ожидаю, что красный и синий будут одинаковыми. красный - фактическая аналитическая производная от f.

Ronan Tarik Drevon 25.05.2018 19:42

Не могу воспроизвести проблему. Градиенты совпадают с моей установкой и верны. Какая у вас версия matplotlib?

Paul Brodersen 28.05.2018 15:44

спасибо за попытку. Получили ли вы правильный сюжет с тем же кодом, который я предоставил? Я проверю свои текущие версии

Ronan Tarik Drevon 28.05.2018 23:11

Да. Сюжет выглядит ожидаемым. Проверено на matplotlib 2.0.2.

Paul Brodersen 29.05.2018 11:16
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
1
5
384
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, это потому, что версии numpy до 1.13 ожидают, что аргумент «x» будет постоянным шагом сетки (см. https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.gradient.html#numpy.gradient). Несмотря на то, что более ранние версии ожидают скалярного dx, они не проверяют это, и результатом является np.gradient (f) / x, что является допустимым делением. Это довольно раздражает, поскольку код, написанный для numpy 1.13, может работать в более ранних версиях с некорректным выводом и без ошибок.

Другие вопросы по теме