Tôi đang cố gắng trích xuất các giá trị phá vỡ tự nhiên từ raster bằng Python.
Quá trình dự định sẽ chuyển: đối tượng raster Arcpy sang NumPy Array (sử dụng RasterToNumPyArray ) để phá vỡ các giá trị tự nhiên (sử dụng chức năng 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)
Mã này trả về lỗi, "ValueError: matrix phải là 2 chiều".
Theo tôi biết, greenArray là một mảng 2 chiều.
1
Bạn đã thử kiểm tra kích thước greenArray trước khi thử xử lý nó với Natural_Breaks chưa? Có vẻ như gọi .shape trên mảng sẽ cung cấp cho bạn kích thước mảng. Tôi chưa từng làm điều này trước đây, nhưng bài đăng này có vẻ hữu ích ... stackoverflow.com/questions/3061761/numpy-array-dimensions
—
Branco
Cảm ơn, Branco. Tôi đã đi qua chủ đề đó, điều đó khiến tôi tin rằng mảng của tôi là 2 chiều. Sự trở lại của greenArray.shape = (1536,2048) và greenArray.ndim = 2. Tôi nghĩ rằng tôi đã đưa ra một giải pháp (sử dụng numpy.ravel ()), mà tôi sẽ viết ngay sau đây.
—
phloem
@phloem Nhìn vào tài liệu PySAL Tôi nghĩ bạn đã đúng khi sử dụng
—
om_henners
flatten
và ravel
; các Natural_Breaks
dường như chỉ chấp nhận một vector 1d các giá trị (hoặc, một (n, 1)
vector).