Я пытаюсь извлечь естественные значения разрыва из растра, используя Python.
Предполагаемый процесс: растровый объект Arcpy в массив NumPy (с использованием RasterToNumPyArray ) для естественных значений разрыва (с использованием функции PySAL Natural Breaks ).
import arcpy, pysal
from pysal.esda.mapclassify import Natural_Breaks as nb
# code to create greenIndex arcpy Raster object here
greenArray = arcpy.RasterToNumPyArray(greenIndex)
breaks = nb(greenArray,k=2,initial=20)
Этот код возвращает ошибку «ValueError: матрица должна быть двухмерной».
Насколько я знаю, greenArray - это двумерный массив.
1
Вы пробовали проверить размеры greenArray, прежде чем пытаться обработать его с помощью Natural_Breaks? Похоже, вызов .shape для массива даст вам размеры массива. Я не делал ничего из этого раньше, но этот пост кажется полезным ... stackoverflow.com/questions/3061761/numpy-array-dimensions
—
Branco
Спасибо, Бранко. Я наткнулся на эту нить, которая заставила меня поверить, что мой массив был двумерным. Возврат greenArray.shape = (1536,2048) и greenArray.ndim = 2. Я думаю, что я нашел решение (используя numpy.ravel ()), которое я напишу в ближайшее время.
—
флоэма
@phloem Глядя на PySAL Docco, я думаю, что вы правы с использованием
—
om_henners
flatten
и ravel
; Natural_Breaks
, кажется, принимает только 1d вектор значений (или просто (n, 1)
вектор).