尝试运行kdtree时scipy.spatial ValueError

时间:2016-09-01 19:48:23

标签: python numpy kdtree

后台:我正在尝试使用cKDtree函数在shapefile上运行最近的邻居,该文件具有201条记录,其中纬度/经度与8760小时的时间序列数据集(总小时数)在一年以内)。我收到了一个错误,自然我查了一下。我发现这个:scipy.spatial ValueError: "x must consist of vectors of length %d but has shape %s"这是同样的错误,但我无法理解这个错误是如何解决的。

工作流程我拉了x& y坐标出shapefile并将它们存储在名为x_vectory_vector的单独数组中。 8760数据是hdf5文件。我使用h5_coords = np.vstack([meta['latitude'], meta['longitude']]).T拉出了坐标。

现在我尝试运行kdtree,

# Run the kdtree to match nearest values
tree = cKDTree(np.vstack([x_vector, y_vector]))
kdtree_indices = tree.query(h5_coords)[1]

但是会导致同样的回溯错误。

追踪错误:

Traceback (most recent call last):
File "meera_extract.py", line 45, in <module>
kdtree_indices = tree.query(h5_coords)[1]
File "scipy/spatial/ckdtree.pyx", line 618, in scipy.spatial.ckdtree.cKDTree.query (scipy/spatial/ckdtree.cxx:6996)
ValueError: x must consist of vectors of length 201 but has shape (1, 389880)

帮帮我,stackoverflow。你是我唯一的希望。

1 个答案:

答案 0 :(得分:2)

所以我似乎需要了解indexof()&amp;的差异。 vstack并使用转置即column_stack。如果有人有同样的问题,那么我改变了.T的工作。希望如果其他人遇到这个问题会有所帮助。非常感谢社区的评论,以帮助解决这个问题!

我更改了cKDtree坐标从hdf5转移到vstack并删除转置column_stack的方式。

.T

我没有尝试在树中添加点,而是创建了一个新变量来保存它们:

# Get coordinates of HDF5 file
h5_coords = np.column_stack([meta['latitude'], meta['longitude']])

然后我没有任何错误地运行了kdtree。

# combine x and y
vector_pnts = np.column_stack([x_vector, y_vector])