Vincenty距离转换为数组

时间:2016-03-28 08:53:36

标签: python arrays numpy geopy

我的问题很简单。从from geopy.distance import vincenty length = vincenty((38.103414282108375, 114.51898800000002),\ (38.07902986076924, 114.50882128404997)) ration = np.array(([2,2],[3,3]))*length 开始,我可以计算出两点之间的距离。但是我无法转换数据格式以进行进一步的计算。

这样的代码:

Distance(xxx)

错误:

  

*:'int'和'vincenty'

的不支持的操作数类型

我尝试将np.array(length)更改为np.array:array(Distance(388.659276576), dtype=object),但失败了。它显示为TabHost,仍然不能直接支持计算。

2 个答案:

答案 0 :(得分:2)

根据手册中的建议,您需要"导出"你的距离/ vincenty在某种格式。例如。像这样:

> 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 iteself,因为(正如你已经提到的)它是一个不支持数学操作数的geopy中的对象。您需要提取数据对象内的值,例如与.miles。有关其他可能值的信息,请参阅完整文档:GeoPy documentation

查看类型的差异:

> 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

或者,如果你真的需要一个numpy数组:

> 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)

如果您要存储/加载大量数据,但可以有用,但总是需要一定的精度。

答案 1 :(得分:1)

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