PySAL phá vỡ tự nhiên từ mảng Numpy


11

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

1
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

1
@phloem Nhìn vào tài liệu PySAL Tôi nghĩ bạn đã đúng khi sử dụng flattenravel; các Natural_Breaksdường như chỉ chấp nhận một vector 1d các giá trị (hoặc, một (n, 1)vector).
om_henners

Câu trả lời:


6

Cảm ơn sự giúp đỡ, Branco và om_henners.

Câu trả lời cho vấn đề của tôi dường như là sử dụng numpy.ravel () để thay đổi mảng được tạo bởi arcpy.RasterToNumPy () thành mảng 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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.