У меня есть следующее pandas.DataFrame
:
City x-Coord City y-Coord coord
12860 59333.3333 18050.0000 (59333.3333+18050j)
12941 59350.0000 18050.0000 (59350+18050j)
13035 59366.6667 18050.0000 (59366.6667+18050j)
12940 59350.0000 18033.3333 (59350+18033.3333j)
13034 59366.6667 18016.6667 (59366.6667+18016.6667j)
13033 59366.6667 18000.0000 (59366.6667+18000j)
13132 59383.3333 18000.0000 (59383.3333+18000j)
13133 59383.3333 18016.6667 (59383.3333+18016.6667j)
13134 59383.3333 18033.3333 (59383.3333+18033.3333j)
13230 59400.0000 18033.3333 (59400+18033.3333j)
Теперь, чтобы вычислить угол между городом 1 (x), 2 (y) и 3 (z):
arccos(np.dot((x-y),(z-y))/(abs(x-y)*abs(z-y))
Итак, я вычислил следующее:
df['combined'] = list(zip(df['City x-Coord'], df['City y-Coord']))
df['combined'] = df['combined'].apply(np.array)
a = df['combined'] - df['combined'].shift(1)
b = df['combined'] - df['combined'].shift(-1)
df['angle'] = [np.degrees(np.arccos(np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y)))).round().astype(int) for
x, y in zip(a, b)]
Но я не получаю правильные углы.
df.head()
Out [5]:
City x-Coord City y-Coord coord \
12860 59333.3333 18050.0000 (59333.3333+18050j)
12941 59350.0000 18050.0000 (59350+18050j)
13035 59366.6667 18050.0000 (59366.6667+18050j)
12940 59350.0000 18033.3333 (59350+18033.3333j)
13034 59366.6667 18016.6667 (59366.6667+18016.6667j)
combined angle
12860 [59333.3333, 18050.0] -2147483648
12941 [59350.0, 18050.0] 180
13035 [59366.6667, 18050.0] 45
12940 [59350.0, 18033.3333] 90
13034 [59366.6667, 18016.6667] 135
Кроме того, последнее значение также неверно из-за значения NaN.
df.tail()
Out [6]:
City x-Coord City y-Coord coord \
12677 59300.0000 18100.0000 (59300+18100j)
12761 59316.6667 18083.3333 (59316.6667+18083.3333j)
12863 59333.3333 18100.0000 (59333.3333+18100j)
12862 59333.3333 18083.3333 (59333.3333+18083.3333j)
12861 59333.3333 18066.6667 (59333.3333+18066.6667j)
combined angle
12677 [59300.0, 18100.0] 135
12761 [59316.6667, 18083.3333] 90
12863 [59333.3333, 18100.0] 45
12862 [59333.3333, 18083.3333] 180
12861 [59333.3333, 18066.6667] -2147483648
1-я и последняя запись, которую я могу понять, как значение Nan.Могу ли я изменить понимание слова, чтобы исправить это?Кроме того, мой расчет верен?Точно сказать не могу.Может кто-нибудь, пожалуйста, дайте второе мнение.
Спасибо, Арнаб