Расстояние Винсента превращается в массив

Мой вопрос прост. От 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 
Другие вопросы по тегам