У меня есть pandas фрейм данных, например:
df = pd.DataFrame({'lat_1':[1,2, np.nan], 'long_1':[1,2, np.nan], 'lat_2':[1,2, 3], 'long_2':[1,2, 3],
'lat_1_counterpart':[1,2, np.nan], 'long_1_counterpart':[1,2, np.nan], 'lat_2_counterpart':[1,2,3], 'long_2_counterpart':[1,2,3]})
display(df)
Я пытался np.linalg.norm
, но пока получил только странные результаты , Скорее всего, я неправильно кормлю ab. Как я могу исправить это, чтобы быть правильным?
df['linalg_wrong_value'] = np.linalg.norm(df[['lat_1', 'lat_1_counterpart', 'long_1', 'long_1_counterpart', 'lat_2', 'lat_2_counterpart', 'long_2', 'long_2_counterpart']], axis=1)
возвращает что-то, но это кажется неправильным, поскольку мне нужно передать ab в функцию. Попытка:
np.linalg.norm(df[['lat_1', 'long_1', 'lat_2', 'long_2']] - df[['lat_1_counterpart', 'long_1_counterpart', 'lat_2_counterpart', 'long_2_counterpart']], axis=1)
но это также NULL
Теперь при попытке выполнить вычисление вручную:
np.sqrt(np.sum((df.lat_1 -df.lat_1_counterpart)**2))
возвращает только 0,0 как скаляр (не вектор значение), но мне нужно, чтобы этот расчет выполнялся для каждой строки, то есть с axis=1
.
Однако:
np.sqrt(np.sum((df.lat_1.values -df.lat_1_counterpart.values)**2 + (df.lat_2.values -df.lat_2_counterpart.values)**2, axis=1), axis=1)
fails with:
ось 1 выходит за пределы для массива измерения 1.
Ожидаемый результат будет:
[0,0,nan]
для уточнения
Я хочу вычесть аналог исходного значения, суммировать все значения и затем взять квадрат root из них.
np.sqrt(np.add((df.lat_1 - df.lat_1_counterpart) **2, (df.lat_2 - df.lat_2_counterpart)**2))
уже работает для двух измерений, но мне нужно включить sum
вместо add
для поддержки нескольких измерений. К сожалению, я, кажется, испортил оси с несколькими измерениями.