PySAL แบ่งตามธรรมชาติจากแถว Numpy


11

ฉันกำลังพยายามดึงค่าตัวแบ่งตามธรรมชาติจากแรสเตอร์ด้วย Python

กระบวนการที่ต้องการไป: วัตถุ Arcpyไปยัง NumPy Array (โดยใช้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 ต้องเป็น 2 มิติ"

เท่าที่ฉันรู้ greenArray เป็นอาร์เรย์ 2 มิติ


1
คุณได้ลองตรวจสอบมิติข้อมูลสีเขียวก่อนที่จะลองประมวลผลด้วย Natural_Breaks หรือไม่ ดูเหมือนว่าการโทร. รูปร่างบนอาเรย์จะทำให้คุณมีขนาดของอาเรย์ ฉันไม่ได้ทำสิ่งนี้มาก่อน แต่โพสต์นี้มีประโยชน์ ... stackoverflow.com/questions/3061761/numpy-array-dimensions
Branco

1
ขอบคุณ Branco ฉันเจอกระทู้นั้นซึ่งทำให้ฉันเชื่อว่าชุดของฉันเป็นแบบสองมิติ การกลับมาของ greenArray.shape = (1536,2048) และ greenArray.ndim = 2 ฉันคิดว่าฉันคิดวิธีแก้ปัญหา (ใช้ numpy.ravel ()) ซึ่งฉันจะเขียนเร็ว ๆ นี้
phloem

1
@phloem ดู PySAL docco ฉันคิดว่าคุณถูกต้องกับการใช้flattenและravel; Natural_Breaksดูเหมือนจะยอมรับเฉพาะเวกเตอร์ 1D ของค่า (หรือเป็น(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.