文森蒂距离转化为数组
Vincenty distance transform into array
我的问题很简单。从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
错误:
unsupported operand type(s) for *: 'int' and 'vincenty'
我试图将 Distance(xxx)
更改为 np.array: np.array(length)
,但失败了。显示为array(Distance(388.659276576), dtype=object)
,还是不支持直接计算
按照手册中的建议,您需要以某种格式 "export" 您的 distance/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
,因为(正如你已经提到的)它是一个不支持数学操作数的 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)
如果您 storing/loading 有大量数据但始终只需要一定的精度,那么此 可能 会有所帮助。
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
我的问题很简单。从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
错误:
unsupported operand type(s) for *: 'int' and 'vincenty'
我试图将 Distance(xxx)
更改为 np.array: np.array(length)
,但失败了。显示为array(Distance(388.659276576), dtype=object)
,还是不支持直接计算
按照手册中的建议,您需要以某种格式 "export" 您的 distance/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
,因为(正如你已经提到的)它是一个不支持数学操作数的 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)
如果您 storing/loading 有大量数据但始终只需要一定的精度,那么此 可能 会有所帮助。
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