Làm cách nào tôi có thể sử dụng mảng NumPy để tối ưu hóa xử lý địa lý dữ liệu lớn?


16

Tôi quan tâm đến việc học cách sử dụng mảng NumPy để tối ưu hóa xử lý địa lý. Phần lớn công việc của tôi liên quan đến "dữ liệu lớn", trong đó việc xử lý địa lý thường mất nhiều ngày để hoàn thành một số nhiệm vụ nhất định. Không cần phải nói, tôi rất quan tâm đến việc tối ưu hóa các thói quen này. ArcGIS 10.1 có một số hàm NumPy có thể được truy cập thông qua arcpy, bao gồm:

  1. NumPyArrayToFeatureClass (arcpy.da)
  2. RasterToNumPyArray (hồ quang)
  3. TableToNumPyArray (arcpy.da)

Ví dụ: mục đích, giả sử tôi muốn tối ưu hóa quy trình xử lý chuyên sâu sau đây sử dụng mảng NumPy:

nhập mô tả hình ảnh ở đây

Ý tưởng chung ở đây là có một số lượng lớn các điểm dựa trên vectơ di chuyển qua cả các hoạt động dựa trên vectơ và raster dẫn đến một bộ dữ liệu raster số nguyên nhị phân.

Làm cách nào tôi có thể kết hợp các mảng NumPy để tối ưu hóa loại quy trình này?


2
FYI, cũng có chức năng NumPyArrayToRaster và chức năng FeatureClassToNumPyArray .
blah238

2
Các Đa xử với ArcGIS bài đăng blog có một số thông tin hữu ích mà có thể áp dụng ở đây. Bạn cũng có thể quan tâm đến các câu hỏi đa xử lý khác .
blah238

3
Dường như với tôi rằng trước khi nghĩ đến việc sử dụng Numpy trong ArcPy, trước tiên bạn cần hiểu những lợi thế nào mà mảng NumPy mang lại cho danh sách Python. Phạm vi của Numpy rộng hơn nhiều so với ArcGIS.
gen

2
@gene, câu trả lời StackOverflow này dường như tổng hợp nó khá tốt.
blah238

3
Bên cạnh đó, nếu bạn cũng quan tâm đến Hadoop - có những phát triển Dữ liệu lớn (Không gian) đáng để xem trong video này và tại Công cụ GIS cho Hadoop
PolyGeo

Câu trả lời:


3

Tôi nghĩ mấu chốt của câu hỏi ở đây là nhiệm vụ nào trong quy trình làm việc của bạn không thực sự phụ thuộc ArcGIS? Ứng cử viên rõ ràng bao gồm các hoạt động bảng và raster. Nếu dữ liệu phải bắt đầu và kết thúc trong một định dạng gdb hoặc một số định dạng ESRI khác, thì bạn cần tìm ra cách giảm thiểu chi phí của định dạng lại này (nghĩa là giảm thiểu số chuyến đi khứ hồi) hoặc thậm chí biện minh cho nó - đơn giản là có thể quá tốn kém để hợp lý hóa. Một chiến thuật khác là sửa đổi quy trình công việc của bạn để sử dụng các mô hình dữ liệu thân thiện với python trước đó (ví dụ: bạn có thể bỏ các đa giác vector trong bao lâu?).

Để lặp lại @gene, trong khi numpy / scipy thực sự tuyệt vời, đừng cho rằng đây là những cách tiếp cận duy nhất có sẵn. Bạn cũng có thể sử dụng danh sách, bộ, từ điển làm cấu trúc thay thế (mặc dù liên kết của @ blah238 khá rõ ràng về sự khác biệt hiệu quả), cũng có máy phát điện, bộ lặp và tất cả các loại công cụ hiệu quả, nhanh, tuyệt vời khác để làm việc với các cấu trúc này trong python. Raymond Hettinger, một trong những nhà phát triển Python, có tất cả các loại nội dung Python tổng quát tuyệt vời ngoài kia. Video này là một ví dụ tốt đẹp .

Ngoài ra, để thêm vào ý tưởng của @ blah238 về xử lý đa kênh, nếu bạn đang viết / thực thi trong IPython (không chỉ là môi trường python "thông thường"), bạn có thể sử dụng gói "song song" của chúng để khai thác nhiều lõi. Tôi không có hứng thú với những thứ này, nhưng thấy nó thân thiện với người mới hơn một chút so với những thứ đa xử lý. Có lẽ thực sự chỉ là một vấn đề của tôn giáo cá nhân ở đó, vì vậy hãy lấy điều đó với một hạt muối. Có một cái nhìn tổng quan tốt về nó bắt đầu lúc 2:13:00 trong video này . Toàn bộ video là tuyệt vời cho IPython nói chung.

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.