Природні відриви PySAL від масиву Numpy


11

Я намагаюся отримати природні значення розриву з растру за допомогою 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,

1
Спасибі, Бранко. Я натрапив на цю нитку, яка змусила мене повірити, що мій масив був двовимірним. Повернення greenArray.shape = (1536,2048) та greenArray.ndim = 2. Я думаю, що я придумав рішення (використовуючи numpy.ravel ()), яке я скоро напишу.
флоема

1
@phloem Дивлячись на docco PySAL, я думаю, ти маєш рацію з використанням flattenта ravel; як Natural_Breaksвидається, приймає лише 1d вектор значень (або, (n, 1)вектор).
om_henners

Відповіді:


6

Дякуємо за допомогу, Branco та om_henners.

Відповідь на мою проблему, як видається, полягає у використанні numpy.ravel () для зміни масиву, створеного arcpy.RasterToNumPy (), на 1D масив:

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.ravel(),k=2,initial=20)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.