Дифференциация Python с использованием numpy, не создающая ожидаемого результата

Итак, я работаю над некоторыми численными вычислениями. Я вычислил около 100 000 точек функции ( return_times ) только вычислимо численно, и теперь хочу взять его производное, используя numpy.gradient . Насколько я понимаю ( doc ), для f (x) могу привести следующие аргументы: numpy.gradient(arr_of_fx_datapoints, arr_of_their_x_values) чтобы заставить его работать. И это то, что я (намеревался) сделать.

Кроме того, что это не сработает. Результат почти (но не точно) равен нулю всюду. Баг воспроизводится в этом абстракте моего кода ниже (sin ^ 2 (x) имеет одну форму с моей исходной функцией):

 import matplotlib.pyplot as plt import numpy as np def find_times(t_arr): return np.power(np.sin(t_arr), 2) t_0 = 0 t_max = np.pi-1E-10 datapoints = 100000 dt = (t_max - t_0) / datapoints t_points = np.arange(t_0, t_max, dt, dtype=np.float64) return_times = find_times(t_points) gd = np.gradient(return_times, t_points) plt.plot(t_points, gd) plt.plot(t_points, return_times) plt.show() 

Результат разочаровывает:
введите описание изображения здесь

Если я печатаю gd , он показывает, что он действительно не является абсолютно нулевым:

 [ inf 6.28318530e-05 6.28318529e-05 ..., -1.25666419e-09 -6.28326813e-10 -3.14161265e-10] 

Итак: Что я пропустил? Каков предельный правильный способ численного преобразования в Python?

Enviroment: Linux Mint 18.2 OS, редактор Geany, NumPy 1.11.0.

Документы не упоминают об этом, но поддержка координатного массива очень новая, NumPy 1.13. В предыдущих версиях NumPy вы можете указать только фиксированное значение скалярного шага для каждого измерения.

В NumPy 1.12 есть проверка, чтобы поймать нескалярные шаги, но NumPy 1.11, в котором вы находитесь, не замечает входной сигнал с массивом и молча делает неправильную вещь, пытаясь обработать массив как шаг.