我有一个包含x,y坐标列表的pandas数据框,并且我正在使用scipy.spatial在给定额外点的情况下查找数据框中的最近点。

import pandas as pd
import numpy as np
import scipy.spatial as spatial

stops = pd.read_csv("stops.csv")
pt = x,y
points = np.array(zip(stops['stop_lat'],stops['stop_lon']))
nn = points[spatial.KDTree(points).query(pt)[1]]


现在,在python 2.7中可以完美工作。在python 3.5中,我得到以下错误:

.../scipy/spatial/kdtree.py", line 231, in __init__
self.n, self.m = np.shape(self.data)
ValueError: not enough values to unpack (expected 2, got 0)


在文档中,我找不到任何有用的东西。

最佳答案

在Python3中,zip()返回iterator object而不是元组列表。因此,points将是一个包含np.object迭代器的0维zip数组,而不是x,y坐标的2D数组。

您可以从迭代器构造list

points = np.array(list(zip(stops['stop_lat'],stops['stop_lon'])))


但是,一个更优雅的解决方案可能是通过索引数据框的多列来避免完全使用zip

points = stops[['stop_lat','stop_lon']].values

关于python - python 2.7和3.5中scipy.spatial.KDTree的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35437771/

10-13 05:02