Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试运行kdtree时出现scipy.spatial ValueError_Python_Numpy_Kdtree - Fatal编程技术网

Python 尝试运行kdtree时出现scipy.spatial ValueError

Python 尝试运行kdtree时出现scipy.spatial ValueError,python,numpy,kdtree,Python,Numpy,Kdtree,Background:我正在尝试使用cKDtree函数在一个shapefile上运行一个最近邻,该shapefile有201条lat/lons记录,时间序列数据集为8760小时(一年中的总小时数)。我得到了一个错误,自然我查了一下。我发现:这是相同的错误,但我很难理解这个错误是如何解决的 工作流:我从shapefile中提取x&y坐标,并将它们存储在称为x\u向量和y\u向量的单独数组中。8760数据是一个hdf5文件。我使用h5_coords=np.vstack([meta['latitude

Background:我正在尝试使用
cKDtree
函数在一个shapefile上运行一个最近邻,该shapefile有201条lat/lons记录,时间序列数据集为8760小时(一年中的总小时数)。我得到了一个错误,自然我查了一下。我发现:这是相同的错误,但我很难理解这个错误是如何解决的

工作流:我从shapefile中提取x&y坐标,并将它们存储在称为
x\u向量
y\u向量
的单独数组中。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)
回溯(最近一次呼叫最后一次):
文件“meera_extract.py”,第45行,在
kdtree_index=tree.query(h5_坐标)[1]
文件“scipy/spatial/ckdtree.pyx”,第618行,位于scipy.spatial.ckdtree.ckdtree.query(scipy/spatial/ckdtree.cxx:6996)中
ValueError:x必须由长度为201的向量组成,但具有形状(1389880)

帮帮我,斯塔克。你是我唯一的希望。

所以我似乎需要仔细阅读
vstack
column\u stack
和转置(即
.T
的使用)的区别。如果有人有同样的问题,这里是我为了使
cKDtree
工作所做的更改。如果有人碰到这个问题,希望这会有所帮助。非常感谢社区的评论帮助解决这个问题

我将
hdf5
坐标的引入方式从
vstack
更改为
column\u stack
并移除转置
.T

# Get coordinates of HDF5 file
h5_coords = np.column_stack([meta['latitude'], meta['longitude']])
我没有尝试在树中添加点,而是创建了一个新变量来保存它们:

# combine x and y
vector_pnts = np.column_stack([x_vector, y_vector])
然后我运行kdtree,没有任何错误

# Run the kdtree to match nearest values
tree = cKDTree(vector_pnts)
kdtree_indices = tree.query(h5_coords)[1]

x_vector.shape
y_vector.shape
h5_coords.shape
的输出是什么?不要将
np.vstack([…])
传递到
cKDTree
,而是采取较小的步骤,使用
points=np.vstack([x_vector,y_vector])
。然后查看
点。形状
。这就是你所期望的吗?
x_向量。shape
&
y_向量。shape
是(201,)和
h5_坐标。shape
(1389880)
。啊,在这种情况下,
np.vstack([x_向量,y_向量])
具有shape
(2201)
。这意味着您只传递了201维空间中的两个点。请使用
np.column\u stack()
而不是
numpy.vstack()