Как я могу создать свой собственный тип данных в Python, чтобы я мог перезаписать арифметические операторы?
В настоящее время я использую Python / Numpy для работы с географическими / GPS-данными (мне это нравится!), И я сталкиваюсь с повторяющейся задачей вычисления расстояний между географическими точками, определенными парой координат.pn = [lon, lat]
У меня есть функция, которую я использую следующим образом:dist = geodistance(p1, p2)
который является аналогом евклидова расстояния в линейной алгебре (векторное вычитание / разность), но встречается в геодезическом (сферическом) пространстве вместо прямоугольного евклидова пространства.
Программно евклидово расстояние определяется как
dist = ((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2)**0.5
Математически это эквивалентноидиоматическое» (из-за отсутствия лучшего слова) предложение
dist = p1 - p1 # the "norm" of the vector difference, subtraction.
В настоящее время я получаю свое расстояние следующим образом:
p1 = [-51.598354,-29.953363]
p2 = [-51.598701,-29.953045]
dist = geodistance(p1, p2)
print dist
>> 44.3904032407
Я хотел бы сделать это:
print p2 - p1 # these points now are from some fancy datatype
>> 44.3904032407
И конечная цель:
track = numpy.array([[-51.203018 -29.996149]
[-51.203018 -29.99625 ]
[-51.20266 -29.996229]
[-51.20229 -29.996309]
[-51.201519 -29.99416 ]], dtype=fancy) # (**) or something like
print numpy.diff(track)
>> ndarray([[ 0. ]
[ 7.03531252]
[ 39.82663316]
[ 41.50958596]
[ 172.49825765]])
Аналогичная вещь: если вы берете дваdatetime
объекты и вычесть их, операция возвращаетtimedelta
объект. Я хочу вычесть две координаты и в результате получить геодезическое расстояние.
Интересно, будет ли работать класс, но dtype (a "подтип» Например, из float32 очень помогли бы при создании массива из списков (**, как я читаю вещи из XML-файлов).
Большое спасибо!