আমার সাথে একজন রাস্টার রয়েছে যার সাথে আমি কিছু পয়েন্ট ইন্টারপোলেশনগুলি করতে চাই। আমি এখানে যেখানে আছি:
from osgeo import gdal
from numpy import array
# Read raster
source = gdal.Open('my_raster.tif')
nx, ny = source.RasterXSize, source.RasterYSize
gt = source.GetGeoTransform()
band_array = source.GetRasterBand(1).ReadAsArray()
# Close raster
source = None
# Compute mid-point grid spacings
ax = array([gt[0] + ix*gt[1] + gt[1]/2.0 for ix in range(nx)])
ay = array([gt[3] + iy*gt[5] + gt[5]/2.0 for iy in range(ny)])
এখন অবধি , আমি সায়পাইয়ের ইন্টারপ 2 ডি ফাংশনটি চেষ্টা করেছি :
from scipy import interpolate
bilinterp = interpolate.interp2d(ax, ay, band_array, kind='linear')
তবে আমি আমার 32-বিট উইন্ডোজ সিস্টেমে 317 × 301 রাস্টার সহ একটি স্মৃতি ত্রুটি পেয়েছি:
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python25\Lib\site-packages\scipy\interpolate\interpolate.py", line 125, in __init__
self.tck = fitpack.bisplrep(self.x, self.y, self.z, kx=kx, ky=ky, s=0.)
File "C:\Python25\Lib\site-packages\scipy\interpolate\fitpack.py", line 873, in bisplrep
tx,ty,nxest,nyest,wrk,lwrk1,lwrk2)
MemoryError
আমি স্বীকার করব, আমার এই সায়পাই ফাংশনে সীমিত আত্মবিশ্বাস আছে কারণ নথিবদ্ধ bounds_error
বা fill_value
প্যারামিটারগুলি কাজ করে না। আমি দেখতে পাচ্ছি না কেন আমার মেমরির ত্রুটি হওয়া উচিত, যেহেতু আমার রাস্টারটি 317। 301, এবং বিলিনিয়ার অ্যালগরিদমটি অসুবিধা হওয়া উচিত নয়।
সাধারণত কি পাইথনে, সম্ভবত নুমপি-র সাথে উপযুক্তভাবে তৈরি করা কোনও ভাল বিলাইনার ইন্টারপোলেশন অ্যালগরিদম জুড়ে এসেছেন? কোন ইঙ্গিত বা পরামর্শ?
(দ্রষ্টব্য: নিকটতম প্রতিবেশী ইন্টারপোলেশন অ্যালগরিদম হ'ল সহজ পিঠা:
from numpy import argmin, NAN
def nearest_neighbor(px, py, no_data=NAN):
'''Nearest Neighbor point at (px, py) on band_array
example: nearest_neighbor(2790501.920, 6338905.159)'''
ix = int(round((px - (gt[0] + gt[1]/2.0))/gt[1]))
iy = int(round((py - (gt[3] + gt[5]/2.0))/gt[5]))
if (ix < 0) or (iy < 0) or (ix > nx - 1) or (iy > ny - 1):
return no_data
else:
return band_array[iy, ix]
... তবে আমি বিলিনিয়ার ইন্টারপোলেশন পদ্ধতিতে বেশি পছন্দ করি)
gt
।
MemoryError
NumPy আপনার এর বাইরে অ্যাক্সেস করার চেষ্টা করার কারণে আপনি পেতে পারেনband_array
? আপনার চেক করা উচিতax
এবংay
।