遍历 Python 中的坐标对
Iterating over pairs of coordinates in Python
我有一个坐标列表:
[(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),..]
我正在尝试编写代码,使我能够使用 Haversine 模块计算每个代码之间的距离:
(伪代码)
for points in daycoords1:
p1 = day1coords[0]
p2 = day1coords[1]
dist_miles = haversine(p1, p2, miles=True)
distday1.append(dist_miles)
有没有办法拉入坐标一和二,测量距离,二和三并测量距离等
我一直在尝试使用 itertools 和 zip(),但我还没有成功。
我不完全确定你想从 haversine
模块中使用什么功能,但要比较你可以使用的坐标列表中的两个连续项目一个包含 zip
个坐标切片的列表理解:
coords = [(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766)]
distances = [haversine(p1, p2, miles=True) for p1, p2 in zip(coords[:-1], coords[1:])]
这会将 p1
与 p2
、p2
与 p3
、p3
与 p4
等进行比较......
如果我没理解错的话,您需要做的就是迭代
zip(daycoords1, daycoords1[1:])
并进行计算。演示:
>>> daycoords1 = [(1,2), (3,4), (5,6)]
>>> for x in zip(daycoords1, daycoords1[1:]):
... print(x)
...
((1, 2), (3, 4))
((3, 4), (5, 6))
如果您有很多坐标,请考虑 itertools.izip
以提高内存效率。
如果您想计算两个位置之间的距离(一个接一个,如 d
所示,向前看),您可以尝试 range
,如下所示。
from haversine import haversine
d = [(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),(53.45028622, -1.93212766)]
data = []
for i in range(len(d)-1):
data.append(haversine(d[i], d[i+1], miles=True))
print data
输出-
[0.18255943050822185, 2.0818287457607068, 0.09290096620460978, 69.0933027640562]
编辑-
如果您想获得 d
中所有组合(所有可能的非重复位置对)之间的距离,则 -
from haversine import haversine
from itertools import combinations
d = [(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),(52.45028622, -1.93212766)]
data = []
for pair in combinations(d,2):
data.append(haversine(pair[0], pair[1], miles=True))
print data
输出-
[0.18255943050822185, 2.072320708393457, 2.1169388238266245, 2.1169388238266245, 2.0818287457607068, 2.1333352954019116, 2.1333352954019116, 0.09290096620460978, 0.09290096620460978, 0.0]
我有一个坐标列表:
[(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),..]
我正在尝试编写代码,使我能够使用 Haversine 模块计算每个代码之间的距离:
(伪代码)
for points in daycoords1:
p1 = day1coords[0]
p2 = day1coords[1]
dist_miles = haversine(p1, p2, miles=True)
distday1.append(dist_miles)
有没有办法拉入坐标一和二,测量距离,二和三并测量距离等
我一直在尝试使用 itertools 和 zip(),但我还没有成功。
我不完全确定你想从 haversine
模块中使用什么功能,但要比较你可以使用的坐标列表中的两个连续项目一个包含 zip
个坐标切片的列表理解:
coords = [(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766)]
distances = [haversine(p1, p2, miles=True) for p1, p2 in zip(coords[:-1], coords[1:])]
这会将 p1
与 p2
、p2
与 p3
、p3
与 p4
等进行比较......
如果我没理解错的话,您需要做的就是迭代
zip(daycoords1, daycoords1[1:])
并进行计算。演示:
>>> daycoords1 = [(1,2), (3,4), (5,6)]
>>> for x in zip(daycoords1, daycoords1[1:]):
... print(x)
...
((1, 2), (3, 4))
((3, 4), (5, 6))
如果您有很多坐标,请考虑 itertools.izip
以提高内存效率。
如果您想计算两个位置之间的距离(一个接一个,如 d
所示,向前看),您可以尝试 range
,如下所示。
from haversine import haversine
d = [(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),(53.45028622, -1.93212766)]
data = []
for i in range(len(d)-1):
data.append(haversine(d[i], d[i+1], miles=True))
print data
输出-
[0.18255943050822185, 2.0818287457607068, 0.09290096620460978, 69.0933027640562]
编辑-
如果您想获得 d
中所有组合(所有可能的非重复位置对)之间的距离,则 -
from haversine import haversine
from itertools import combinations
d = [(52.472665, -1.8977818),
(52.47455886, -1.90080653),
(52.4515712, -1.9327772),
(52.45028622, -1.93212766),(52.45028622, -1.93212766)]
data = []
for pair in combinations(d,2):
data.append(haversine(pair[0], pair[1], miles=True))
print data
输出-
[0.18255943050822185, 2.072320708393457, 2.1169388238266245, 2.1169388238266245, 2.0818287457607068, 2.1333352954019116, 2.1333352954019116, 0.09290096620460978, 0.09290096620460978, 0.0]