Предыстория: я пытаюсь запустить ближайшего соседа, используя функцию cKDtree
в шейп-файле, который имеет 201 запись с широтой и долготой по набору данных временного ряда из 8760 часов (общее количество часов в году). Я получаю сообщение об ошибке, естественно, я посмотрел его. Я нашел это: scipy.spatial ValueError: x должен состоять из векторов длины %d, но иметь форму %s, что является той же ошибкой, но мне трудно понять, как именно эта ошибка была устранена.
Рабочий процесс: я вытащил координаты x и y из шейп-файла и сохранил их в отдельных массивах с именами x_vector
и y_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. Ты моя единственная надежда.
x_vector.shape
,y_vector.shape
иh5_coords.shape
? - person Mahdi   schedule 01.09.2016np.vstack([...])
вcKDTree
, сделайте меньший шаг и используйтеpoints = np.vstack([x_vector, y_vector])
. Тогда взгляните наpoints.shape
. Это то, что вы ожидаете? - person Warren Weckesser   schedule 01.09.2016x_vector.shape
иy_vector.shape
— это (201,), аh5_coords.shape
— это(1, 389880)
. - person Nikolai   schedule 01.09.2016np.vstack([x_vector, y_vector])
имеет форму(2, 201)
. Это означает, что вы проходитеcKDTree
всего две точки в 201-мерном пространстве. - person Warren Weckesser   schedule 01.09.2016vector_pnts = np.vstack([x_vector, y_vector])
. Форма теперь (2, 201). Не знаю, что я ищу... - person Nikolai   schedule 01.09.2016vector_pnts = np.vstack([x_vector, y_vector]).T
, разве ты не этого хочешь? - person Mahdi   schedule 01.09.2016np.column_stack()
вместоnumpy.vstack()
. - person Warren Weckesser   schedule 01.09.2016vector_pnts.shape
(201, 2), но все еще с той же общей ошибкой. - person Nikolai   schedule 01.09.2016ValueError: x must consist of vectors of length 2 but has shape (1, 389880)
? - person Warren Weckesser   schedule 01.09.2016length 201
наlength 2
- person Nikolai   schedule 01.09.2016h5_coords
не является набором точек в двумерном пространстве. Вы должны исправить, как он создается. Вы говорите, что использовалиh5_coords = np.vstack([meta['latitude'], meta['longitude']]).T
. Это не создание массива правильной формы. Попробуйте использоватьcolumn_stack
и не транспонируйте. (Чтобы быть уверенным, нам нужно знать формуmeta['latitude']
.) - person Warren Weckesser   schedule 01.09.2016meta['latitude'].shape
это(194940, 1)
. Выполнение того, что вы предложили, и использованиеcolumn_stack
без транспонирования сработало.h5_coords.shape
теперь(194940, 2)
и kdtree совпало. Кажется, я застрял наvstack
, ноcolumn_stack
было то, что нужно. Мне нужно прочитать о разнице между ними! - person Nikolai   schedule 01.09.2016