Несоответствия в применении функции np.gradient - PullRequest
0 голосов
/ 06 сентября 2018

Ранее я вычислял градиент между множеством точек вручную. Я случайно увидел, что в библиотеке numpy существует функция np.gradient.

Взволнованно, я попробовал это на моей локальной машине, и это сработало, как показано ниже:

dataframe['Scrubber_Gradient_20m_mean'] = np.gradient(dataframe['ScrubberLevel'].rolling(center=False,window=2).mean())

Это вернуло значения скользящего градиента, что было именно то, что я был после. Однако теперь я перенес часть своего кода в развертывание AWS в среде Spyder с той же версией, что и на моей локальной машине, и, хотя код такой же, внезапно выдается ошибка:

ValueError: Shape of array too small to calculate a numerical gradient, at least (edge_order + 1) elements are required.

Scrub Gradient Error Message

Однако, что не имеет смысла для меня, так это то, что когда я запускаю код вне функции и просто в консоли - вычисления работают нормально. Массив не «слишком мал», по крайней мере, не из того, что я вижу.

No Error

Я не могу понять причину этого. У кого-нибудь есть причины для такого потенциально непоследовательного поведения?

До сих пор я пробовал следующее:

  1. Убедитесь, что обе версии Python / Numpy одинаковы на обоих AWS Сервер и локальный компьютер
  2. Убедитесь, что оба набора данных одинаковы как внутри, так и вне функции
  3. Проверка функции градиента внутри / вне функции

Моя цифровая версия: 1.15.1 как на моей локальной машине, так и на сервере AWS.

Я приложил снимок фиктивных данных, чтобы можно было их воспроизвести. Пожалуйста, используйте столбец ScrubberLevel. Ссылка на данные

Это код, который я использовал для запуска на моей локальной машине:

df_condabri_central_T1['Scrubber_Gradient_hour_mean'] = np.gradient(df_condabri_central_T1['ScrubberLevel'].rolling(center=False,window=6).mean())

Это код, который я использовал для запуска в среде AWS Spyder в функции:

def feature_eng(dataframe):
#There are other features but for the sake of my problem I have restricted it to this variable
dataframe['ScrubberLevel'] = np.gradient(dataframe['ScrubberLevel'].rolling(center=False,window=2).mean())
return dataframe

Теперь, когда я запускаю это в консоли в AWS Spyder, нет проблем, как показано ниже. Screen when running code in AWS Spyder

Однако, когда я пытаюсь запустить это через свою функцию, я получаю следующее: enter image description here

...