ฉันจะใช้อาร์เรย์ NumPy เพื่อเพิ่มประสิทธิภาพการประมวลผลข้อมูลขนาดใหญ่ได้อย่างไร


16

ฉันสนใจที่จะเรียนรู้วิธีการใช้อาร์เรย์ NumPy เพื่อเพิ่มประสิทธิภาพการประมวลผลทางภูมิศาสตร์ งานส่วนใหญ่ของฉันเกี่ยวข้องกับ "ข้อมูลขนาดใหญ่" ซึ่งการประมวลผลทางภูมิศาสตร์มักใช้เวลาหลายวันเพื่อทำงานบางอย่างให้สำเร็จ จำเป็นต้องพูดฉันสนใจมากในการเพิ่มประสิทธิภาพการปฏิบัติเหล่านี้ ArcGIS 10.1 มีฟังก์ชั่น NumPy จำนวนมากที่สามารถเข้าถึงได้ผ่านทาง arcpy รวมไปถึง:

  1. NumPyArrayToFeatureClass (arcpy.da)
  2. RasterToNumPyArray (arcpy)
  3. TableToNumPyArray (arcpy.da)

ตัวอย่างเช่นสมมติว่าฉันต้องการเพิ่มประสิทธิภาพการประมวลผลเวิร์กโฟลว์เข้มข้นต่อไปนี้โดยใช้อาร์เรย์ NumPy:

ป้อนคำอธิบายรูปภาพที่นี่

แนวคิดทั่วไปที่นี่คือมีจุดจำนวนมากที่ใช้เวกเตอร์ที่เคลื่อนที่ผ่านทั้งการดำเนินการตามเวกเตอร์และแรสเตอร์ทำให้เกิดชุดข้อมูลแรสเตอร์เลขฐานสองจำนวนเต็ม

ฉันจะรวมอาร์เรย์ NumPy เพื่อเพิ่มประสิทธิภาพเวิร์กโฟลว์ประเภทนี้ได้อย่างไร


2
FYI นอกจากนี้ยังมีฟังก์ชันNumPyArrayToRasterและฟังก์ชันFeatureClassToNumPyArray
blah238

2
การโพสต์บล็อกแบบมัลติโพรเซสเซอร์ด้วย ArcGISมีข้อมูลที่ดีที่อาจนำไปใช้ นอกจากนี้คุณยังอาจจะสนใจในคำถามหลายตัวอื่น
blah238

3
ดูเหมือนว่าก่อนที่จะคิดเกี่ยวกับการใช้ Numpy ใน ArcPy คุณต้องเข้าใจก่อนว่าอาร์เรย์ NumPy มีประโยชน์อะไรบ้างจากรายการ Python ขอบเขตของ Numpy กว้างกว่า ArcGIS มาก
ยีน

2
@ ยีนคำตอบ StackOverflow นี้ดูเหมือนจะสรุปได้ค่อนข้างดี
blah238

3
นอกจากนี้หากคุณสนใจ Hadoop ด้วย - มีการพัฒนาข้อมูลขนาดใหญ่ (Spatial) ที่ควรค่าแก่การดูในวิดีโอนี้และที่GIS Tools สำหรับ Hadoop
PolyGeo

คำตอบ:


3

ฉันคิดว่าประเด็นสำคัญของคำถามที่นี่คืองานใดในเวิร์กโฟลว์ของคุณที่ไม่ได้ขึ้นกับ ArcGIS ผู้สมัครที่เห็นได้ชัดรวมถึงการดำเนินงานแบบตารางและแรสเตอร์ หากข้อมูลต้องเริ่มต้นและสิ้นสุดภายใน gdb หรือรูปแบบ ESRI อื่น ๆ คุณจะต้องหาวิธีลดต้นทุนของการจัดรูปแบบนี้ใหม่ (เช่นลดจำนวนรอบการเดินทาง) หรือปรับให้เหมาะสม - อาจเป็นเรื่องง่ายเกินไป แพงไปหาเหตุผลเข้าข้างตนเอง กลยุทธ์อื่นคือการปรับเปลี่ยนเวิร์กโฟลว์ของคุณเพื่อใช้แบบจำลองข้อมูลที่เป็นมิตรกับงูหลามก่อนหน้านี้ (ตัวอย่างเช่นคุณจะทิ้งเวกเตอร์รูปหลายเหลี่ยมได้เร็วแค่ไหน)

เพื่อ echo @gene ในขณะที่ numpy / scipy นั้นยอดเยี่ยมจริงๆอย่าคิดว่านี่เป็นวิธีการเดียวที่มีให้ คุณยังสามารถใช้ลิสต์ชุดพจนานุกรมเป็นโครงสร้างทางเลือก (แม้ว่าลิงก์ของ @ blah238 นั้นค่อนข้างชัดเจนเกี่ยวกับส่วนต่างของประสิทธิภาพ) นอกจากนี้ยังมีเครื่องกำเนิดไฟฟ้าตัววนซ้ำและเครื่องมืออื่น ๆ ที่ยอดเยี่ยมรวดเร็วและมีประสิทธิภาพสำหรับการทำงานโครงสร้างเหล่านี้ในไพ ธ อน Raymond Hettinger หนึ่งในผู้พัฒนา Python มีเนื้อหาของ Python ทั่วไปทุกประเภทวิดีโอนี้เป็นตัวอย่างที่ดี

นอกจากนี้หากต้องการเพิ่มแนวคิดของ @ blah238 เกี่ยวกับการประมวลผลแบบมัลติเพล็กซ์หากคุณกำลังเขียน / ดำเนินการภายในIPython (ไม่ใช่แค่สภาพแวดล้อมแบบ "ปกติ" แบบไพ ธ อน) คุณสามารถใช้แพ็คเกจ "ขนาน" เพื่อใช้ประโยชน์หลายแกนประมวลผล ฉันไม่หวือกับสิ่งนี้ แต่พบว่าเป็นระดับที่สูงขึ้น / เป็นมิตรกับมือใหม่กว่าสิ่งที่ประมวลผลหลายอย่าง น่าจะเป็นแค่เรื่องของศาสนาส่วนบุคคลที่นั่นดังนั้นเอามันไปด้วยเม็ดเกลือ มีภาพรวมที่ดีเกี่ยวกับมันเริ่มตั้งแต่ 2:13:00 ในวิดีโอนี้ วิดีโอทั้งหมดดีมากสำหรับ IPython โดยทั่วไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.