在python中找到最大梯度的位置

时间:2018-08-01 18:39:14

标签: python pandas numpy

我有下面的数据集,它代表不同深度的水温。

depth   temp
0.0     18.613
1.0     18.625
2.0     18.628
3.0     18.617
4.0     18.599
5.0     18.580
6.0     18.559
7.0     18.538
8.0     18.514
9.0     18.478
10.0    18.424

我想计算温度梯度最大的深度。 我尝试使用dy=(np.diff(Tw))/(np.diff(hw))来计算最大差异,但在那种情况下,我只能得到最大梯度(即dy),但我需要最大梯度的深度。

感谢您的帮助

3 个答案:

答案 0 :(得分:3)

假设您将temp存储在名为y的列表中,则使用NumPy的np.gradient(y)计算梯度。然后,您可以采用梯度的最大值,其对应的索引为np.argmax(np.abs(np.gradient(y)))

使用该索引,您可以获得depth,在这里我用列表x

表示。
i_max = np.argmax(np.abs(np.gradient(y)))
print (x[i_max]) 

输出

0.0

您也可以在数据框架的框架中结合以上思想。如果绘制depth与梯度的关系图,这就是它的外观。当然,您可以使用一些插值来使曲线更平滑并获得更准确的值。在这里(也是从您的数据中得出的事实)假定间距是统一的。您还可以指定可变间距或非单位间距。有关如何使用它们的更多详细信息,请参见:https://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html

enter image description here

答案 1 :(得分:2)

我知道有SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = new Date(); sdf.setTimeZone(TimeZone.getTimeZone("GMT-7")); String value = sdf.format(date); System.out.println(value); Date date2 = sdf.parse(value); long result = date2.getTime(); System.out.println(result); return result; 个函数scipy,但让我们尝试一些不同的方法

scipy.signal.argrelextrema

更新似乎使您的措辞有点困惑,我已经更新了,请注意这里应该是9-10的范围最大。

df.iloc[(np.sign(df.temp.diff().dropna()).diff().dropna()==-2).nonzero()[0]+1,:]
Out[729]: 
   depth    temp
2    2.0  18.628

答案 2 :(得分:1)

您似乎想让熊猫移动

import pandas as pd

df['grad_temp'] = df['temp'] / df['temp'].shift(-1)
df['grad_depth'] = df['depth'] / df['depth'].shift(-1)

df.max() #will give you the max for all columns

注意:您将使用NaN作为最后一个值

相关问题