Я намагаюся отримати природні значення розриву з растру за допомогою 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 Дивлячись на docco PySAL, я думаю, ти маєш рацію з використанням
—
om_henners
flatten
та ravel
; як Natural_Breaks
видається, приймає лише 1d вектор значень (або, (n, 1)
вектор).