以前,我一直在手工计算一组点之间的梯度。我偶然发现在numpy库中存在一个np.gradient函数。
很高兴,我在本地计算机上尝试了此操作,其工作方式如下:
dataframe['Scrubber_Gradient_20m_mean'] = np.gradient(dataframe['ScrubberLevel'].rolling(center=False,window=2).mean())
这返回的滚动梯度值正是我所追求的。但是,我现在将一些代码移到了Spyder Environment上的AWS部署中,该版本与本地计算机具有相同的numpy版本,即使代码相同,也会突然引发错误:
ValueError: Shape of array too small to calculate a numerical gradient, at least (edge_order + 1) elements are required.
但是,对我来说没有意义的是,当我在某个功能的外部代码中,并且只是在控制台中运行该代码时,计算正常。数组不是“太小”,至少从我所看到的来看不是。
我不明白原因。有人会对这种潜在的不一致行为有任何理由吗?
到目前为止,我已经尝试了以下方法:
我的numpy版本是:我的本地计算机和AWS服务器上均为1.15.1。
我附上了虚拟数据的快照,以便可以复制它。请使用ScrubberLevel列。 Link to Data
这是我用来在本地计算机上运行的代码:
df_condabri_central_T1['Scrubber_Gradient_hour_mean'] = np.gradient(df_condabri_central_T1['ScrubberLevel'].rolling(center=False,window=6).mean())
这是我曾经在函数中的AWS Spyder Environment上运行的代码:
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