Значения интервалов для расчета градиента с использованием numpy .gradient в кадре данных pandas - PullRequest
0 голосов
/ 10 апреля 2020

Я хотел бы рассчитать градиент для моего столбца «скорость» в моем фрейме данных, он будет соответствовать dx :

enter image description here

Я хотел бы рассчитать градиент так, чтобы мой dy был столбцом "Timestamp" ... но ... я бы хотел поместить формулу в несколько строк:

  • например, если я разнесу из четырех строк градиент по 5-му индексу будет (88-27) / (1.0-0.2)
  • Я не знаю, как это указать, потому что когда Я делаю np.gradient(df["speed"], df["Timestamp"]) он использует унитарный интервал

Вот код моего фрейма данных df=pd.DataFrame({'Timestamp':[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6],'speed':[27,27,27,86,86,86,74,74,74,88,88,88,62,62,62,62]})

1 Ответ

0 голосов
/ 10 апреля 2020

Вы можете просто применить нарезку на фреймах данных, чтобы получить интервал, а затем применить градиент.

import pandas as pd
df=pd.DataFrame({'Timestamp':[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6],'speed':[27,27,27,86,86,86,74,74,74,88,88,88,62,62,62,62]})

import numpy as np
g1 = np.gradient(df["speed"], df["Timestamp"]) 

spacing = 4

g2 = np.gradient(df["speed"][::spacing], df["Timestamp"][::spacing]) 

Out:

[ 0.00000000e+00  0.00000000e+00  2.95000000e+02  2.95000000e+02
  0.00000000e+00 -6.00000000e+01 -6.00000000e+01  0.00000000e+00
  7.00000000e+01  7.00000000e+01  5.68434189e-14 -1.30000000e+02
 -1.30000000e+02 -1.13686838e-13  0.00000000e+00  0.00000000e+00]
[147.5   58.75 -30.   -30.  ]

Вы можете сделать что-то подобное, так как ваше требование отличается:

def gradient(y, x, spacing=1):
    y_c = np.pad(y, (spacing-1, spacing-1), 'constant', constant_values=(0, 0))
    x_c = np.pad(x, (spacing-1, spacing-1), 'constant', constant_values=(0, 0))
    dydx = []
    #print(y)
    #print(y_c)
    for i in range(1, y.shape[0]):
        dy = y_c[i+spacing-1] - y_c[i-1]
        dx = x_c[i+spacing-1] - x_c[i-1]
        dydx.append(dy/dx)

    return np.array(dydx)

Примечание: этот результат не будет соответствовать numpy градиент для интервала = 1, так как numpy использует 2-шаговый размер по умолчанию для расчета dy / dx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...