Saya memiliki dataset raster dalam format ASCII. Menggunakan Python, saya perlu menentukan min
dan max
nilai - nilai di dalam dataset. Saya telah diberitahu bahwa informasi header adalah kunci, yang berisi hal-hal seperti jumlah baris / kolom, ukuran sel, dan lain-lain.
Tidak bisakah Anda melewatkan informasi header dan membaca seluruh dataset untuk menentukan nilai min
- max
nilainya?
Inilah yang saya coba lakukan. Saya melewatkan beberapa baris pertama yang berisi informasi header, dan mencoba menentukan nilai dari sana. Berikut ini adalah jenis dari apa yang saya miliki, tetapi perlu bimbingan karena saya baru di Python.
raster_file = open('data.asc', 'r') # Open the file
data = raster_file.readlines()[4:] # Read the lines in the file, and skip the first six lines
for lines in data:
print max(data) # Find the max value in data
print min(data) # Find hte min value in data
Ada saran?
python
statistics
esri-ascii-raster
kaoscify
sumber
sumber
Jawaban:
Anda bisa menggunakan numpy. Lihat contoh di bawah ini. Array bertopeng numpy dapat dihasilkan akuntansi untuk nilai tidak ada data. Lihat topik bantuan numpy untuk mafromtxt dan genfromtxt
dari sana hanya masalah menentukan statistik yang Anda inginkan
sumber
Anda ingin statistik data raster.
Lihat apa yang Anda lakukan di gui dulu (untuk pekerjaan rumah.)
Kemudian Anda dapat menggunakan jendela python atau skrip .
sumber
sumber
AttributeError: 'list' object has no attribute 'split'
data = raster_file.readlines()[4:]
tersebut tidak benar-benar berfungsi ketika menentukan rentang. Saya memperbaiki kesalahan yang saya alami di komentar sebelumnya. Ini dilakukan dengan menambahkannum = data[7]
di baris ke-3. Itu kemudian dipisah menggunakanvalues = num.split()
dan mampu menemukan max / min, tetapi untuk jalur tertentu saja. Bagaimana saya dapat menemukan maks / mnt dari seluruh dokumen?if check==True
blok dengan menginisialisasi nilai min / maks Anda. Anda ingin menginisialisasi min ke sys.float_info.max dan maks ke sys.float_info.min.Jika Anda tidak ingin menggunakan numpy (dan memang seharusnya begitu, sangat cocok untuk hal semacam ini), maka Anda perlu:
maximum
variabel Anda ke angka negatif yang sangat besar danminimum
variabel Anda ke angka positif yang sangat besarmaximum = max(maximum, max(myfloatlist))
dan setara untuk nilai minimum.sumber
Saya baru saja melakukannya kemarin. Saya menggunakan
arcpy.RasterToNumPyArray
, mengkonversi array numpy ke daftar, lalu mengulangi daftar saya melalui daftar pemahaman untuk menemukan nilai min dan max.sumber
myArray.min()
/myArray.max()
lebih sederhana / lebih cepat?