ListL
в некоторых отношениях является патологической структурой, это массив массивов, в которых ожидается двухмерный массив.
numpy/scipy
идет на все, чтобы любезно принять большинство вещей, которые можно интерпретировать как2D массив, например, если вы изменили KDTRee(ListL)
на KDTree(list(ListL))
, он работает.
Почему это работает?Потому что list(listL)
ведет себя как большинство "по существу 2D" структур (например, списки списков и т. Д.).Мы можем отправить его через array
или asarray
или asanyarray
и т. Д. Для получения подлинного двумерного массива.
>>> np.array(list(listL))
array([[-12939613.07220617, 3962855.50690994],
[-12939614.67349505, 3962828.80807231],
[-12939484.00289515, 3962828.1637531 ],
[-12939484.98046737, 3962854.91251931]])
>>> np.array(list(listL)).shape
(4, 2)
Массив массивов - это один из немногих оставшихся случаев, которые все еще приводят в движениеМеханизм преобразования массива:
>>> np.array(listL)
array([array([-12939613.07220617, 3962855.50690994]),
array([-12939614.67349505, 3962828.80807231]),
array([-12939484.00289515, 3962828.1637531 ]),
array([-12939484.98046737, 3962854.91251931])], dtype=object)
>>> np.array(listL).shape
(4,)
Мы можем видеть, что, несмотря на нашу попытку преобразовать в обычный массив, listL
продолжает сообщать о его форме как 1D.Похоже, это вызывает исключение, которое вы наблюдаете.