Numpy 배열에서 PySAL 자연 휴식


11

파이썬을 사용하여 래스터에서 자연 브레이크 값을 추출하려고합니다.

의도 된 프로세스는 다음과 같습니다. 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 : matrix must be twodimensional"오류를 반환합니다.

내가 아는 한 greenArray는 2 차원 배열입니다.


1
Natural_Breaks로 처리하기 전에 greenArray 치수를 확인하려고 했습니까? 배열에서 .shape 를 호출 하면 배열 크기가 표시됩니다. 이전에이 작업을 수행 한 적이 없지만이 게시물이 도움이 될 것 같습니다 ... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco

1
고마워, 브랑코 나는 그 스레드를 발견했고, 그 결과 내 배열이 2 차원이라고 믿게되었습니다. greenArray.shape = (1536,2048) 및 greenArray.ndim = 2가 반환됩니다. 솔루션 (numpy.ravel () 사용)을 생각해 보았습니다. 곧 작성하겠습니다.
phloem

1
내가 당신에게 사용에 맞아요 생각 docco @phloem는 PySAL 보면 flattenravel; 는 Natural_Breaks1 차원 벡터 값 (또는 (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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.