Расстояние Винсента превращается в массив
Мой вопрос прост. От geopy.distance
Я могу рассчитать расстояние между двумя точками. Но я не могу преобразовать формат данных для дальнейших вычислений.
Код как это:
from geopy.distance import vincenty
length = vincenty((38.103414282108375, 114.51898800000002),\
(38.07902986076924, 114.50882128404997))
ration = np.array(([2,2],[3,3]))*length
Ошибка:
неподдерживаемые типы операндов для *: 'int' и 'vincenty'
Я пытался изменить Distance(xxx)
в np.array: np.array(length)
, но не удалось. Это показывает как array(Distance(388.659276576), dtype=object)
, по-прежнему не может поддерживать вычисления напрямую.
2 ответа
Как указано в руководстве, вам необходимо "экспортировать" ваше расстояние / Винсент в некотором формате. Например, вот так:
> from geopy.distance import vincenty
> newport_ri = (41.49008, -71.312796)
> cleveland_oh = (41.499498, -81.695391)
> print(vincenty(newport_ri, cleveland_oh).miles)
538.3904451566326
Вы не можете обработать vincenty
Само собой, потому что (как вы уже упоминали) это объект вне геопсии, который не поддерживает математические операнды. Вам нужно извлечь значения внутри объекта данных, например, с помощью .miles
, См. Полную документацию для других возможных значений: документация GeoPy
Смотрите различия в типах:
> type(vincenty(newport_ri, cleveland_oh))
geopy.distance.vincenty
> type(vincenty(newport_ri, cleveland_oh).miles)
float
Теперь вы можете рассчитать с этим:
> vincenty(newport_ri, cleveland_oh).miles
538.3904451566326
> vincenty(newport_ri, cleveland_oh).miles * 2
1076.7808903132652
Или, если вам действительно нужен массивный массив из этого:
> np.array(vincenty(newport_ri, cleveland_oh).miles)
array(538.3904451566326)
> type(np.array(vincenty(newport_ri, cleveland_oh).miles))
numpy.ndarray
РЕДАКТИРОВАТЬ: обратите внимание, что вы можете даже принудительно установить его тип данных с помощью встроенного в NumPy dtype
параметр:
> np.array(vincenty(newport_ri, cleveland_oh).miles, dtype=np.float32)
array(538.3904418945312, dtype=float32)
> np.array(vincenty(newport_ri, cleveland_oh).miles, dtype=np.float64)
array(538.3904451566326) # dtype=float64, default type here
> np.array(vincenty(newport_ri, cleveland_oh).miles, dtype=np.int32)
array(538, dtype=int32)
Это может быть полезно, если вы храните / загружаете много данных, но вам всегда нужна определенная точность.
vincenty((38.103414282108375, 114.51898800000002),\
(38.07902986076924, 114.50882128404997))
Это объект, и вы пытаетесь умножения на объект другого типа. Я бы предложил сделать это
from geopy.distance import vincenty
length = vincenty((38.103414282108375, 114.51898800000002),\
(38.07902986076924, 114.50882128404997))
length = length.miles
ration = np.array(([2,2],[3,3]))*length