দাবি অস্বীকার: আমি বেশিরভাগ ক্ষেত্রে এই পোস্টটি সিন্টেক্সটিকাল বিবেচনার সাথে এবং সাধারণ আচরণের কথা মাথায় রেখে লিখছি। আমি বর্ণিত পদ্ধতিগুলির মেমরি এবং সিপিইউ দিকটির সাথে পরিচিত নই এবং আমি এই উত্তরটি তাদের কাছে লক্ষ্য রেখেছি যার কাছে যুক্তিসঙ্গতভাবে ছোট ছোট ডেটা রয়েছে, যেমন ইন্টারপোলেশনের গুণটি বিবেচনা করার মূল দিক হতে পারে। আমি সচেতন যে খুব বড় ডেটা সেটগুলির সাথে কাজ করার সময়, আরও ভাল-সম্পাদন করার পদ্ধতিগুলি (যথা griddata
এবং Rbf
) সম্ভবত ব্যবহার্য হবে না।
আমি তিন ধরণের বহু-মাত্রিক ইন্টারপোলেশন পদ্ধতিগুলির তুলনা করতে যাচ্ছি (interp2d
/ স্প্লিংস griddata
এবং Rbf
) । আমি এগুলিকে দুই ধরণের ইন্টারপোলেশন টাস্ক এবং দুই ধরণের অন্তর্নিহিত ফাংশন (পয়েন্টগুলি যা থেকে ইন্টারপোল্ট করতে হবে) এর অধীন করব। সুনির্দিষ্ট উদাহরণগুলি দ্বি-মাত্রিক ইন্টারপোলেশন প্রদর্শন করবে, তবে কার্যকর পদ্ধতিগুলি স্বেচ্ছাচারী মাত্রায় প্রযোজ্য। প্রতিটি পদ্ধতি বিভিন্ন ধরণের বিরক্তি সরবরাহ করে; সব ক্ষেত্রেই আমি ঘনক্ষেত্রবৃত্ত (বা 1 এর কাছাকাছি কিছু ) ব্যবহার করব। এটি লক্ষণীয় গুরুত্বপূর্ণ যে আপনি যখনই প্রক্ষিপ্ত ব্যবহার করেন তখন আপনি আপনার কাঁচা ডেটার তুলনায় পক্ষপাত প্রবর্তন করেন এবং ব্যবহৃত নির্দিষ্ট পদ্ধতিগুলি আপনি যে শিল্পকর্মগুলি দিয়ে শেষ করবেন তা প্রভাবিত করে। সর্বদা এটি সম্পর্কে সচেতন থাকুন, এবং দায়িত্ববহুলভাবে বিযুক্ত করুন।
দুটি অন্তরোলনের কাজ হবে
- আপসাম্পলিং (ইনপুট ডেটা একটি আয়তক্ষেত্রাকার গ্রিডে রয়েছে, আউটপুট ডেটা একটি ঘনক গ্রিডে থাকে)
- নিয়মিত গ্রিডে ছড়িয়ে ছিটিয়ে থাকা ডেটার বিভাজন
দুটি ফাংশন (ডোমেনের ওপরে [x,y] in [-1,1]x[-1,1]
) হবে
- একটি মসৃণ এবং বন্ধুত্বপূর্ণ ফাংশন:
cos(pi*x)*sin(pi*y)
; পরিসীমা মধ্যে[-1, 1]
- একটি মন্দ (এবং বিশেষত, অ-অবিচ্ছিন্ন) ফাংশন:
x*y/(x^2+y^2)
মূলটির কাছাকাছি 0.5 মান সহ; পরিসীমা মধ্যে[-0.5, 0.5]
তারা দেখতে কেমন তা এখানে:
এই চারটি পরীক্ষার অধীনে তিনটি পদ্ধতি কীভাবে আচরণ করে তা আমি প্রথমে প্রদর্শন করব, তারপরে আমি তিনটিটির বাক্য গঠনটি বিশদ করব। কোনও পদ্ধতি থেকে আপনার কী আশা করা উচিত তা যদি আপনি জানেন তবে আপনি এটির বাক্য গঠন (আপনার দিকে তাকিয়ে interp2d
) শিখতে আপনার সময় নষ্ট করতে নাও চান ।
পরীক্ষার ডেটা
বর্ণনাকারীর স্বার্থে, এখানে কোডটি দিয়েছি যা দিয়ে আমি ইনপুট ডেটা তৈরি করেছি। যদিও এই নির্দিষ্ট ক্ষেত্রে আমি ডেটা অন্তর্নিহিত ফাংশন সম্পর্কে স্পষ্টভাবে অবগত, আমি কেবল এটি ঘূর্ণন পদ্ধতির জন্য ইনপুট উত্পন্ন করতে ব্যবহার করব। আমি সুবিধার্থে (এবং বেশিরভাগই ডেটা উত্পন্ন করার জন্য) অদ্ভুত ব্যবহার করি, তবে একা স্কিপিও যথেষ্ট।
import numpy as np
import scipy.interpolate as interp
# auxiliary function for mesh generation
def gimme_mesh(n):
minval = -1
maxval = 1
# produce an asymmetric shape in order to catch issues with transpositions
return np.meshgrid(np.linspace(minval,maxval,n), np.linspace(minval,maxval,n+1))
# set up underlying test functions, vectorized
def fun_smooth(x, y):
return np.cos(np.pi*x)*np.sin(np.pi*y)
def fun_evil(x, y):
# watch out for singular origin; function has no unique limit there
return np.where(x**2+y**2>1e-10, x*y/(x**2+y**2), 0.5)
# sparse input mesh, 6x7 in shape
N_sparse = 6
x_sparse,y_sparse = gimme_mesh(N_sparse)
z_sparse_smooth = fun_smooth(x_sparse, y_sparse)
z_sparse_evil = fun_evil(x_sparse, y_sparse)
# scattered input points, 10^2 altogether (shape (100,))
N_scattered = 10
x_scattered,y_scattered = np.random.rand(2,N_scattered**2)*2 - 1
z_scattered_smooth = fun_smooth(x_scattered, y_scattered)
z_scattered_evil = fun_evil(x_scattered, y_scattered)
# dense output mesh, 20x21 in shape
N_dense = 20
x_dense,y_dense = gimme_mesh(N_dense)
মসৃণ ফাংশন এবং upsampling
আসুন সহজতম কাজটি দিয়ে শুরু করি। এখানে কিভাবে আকৃতি একটি জাল থেকে একটি upsampling [6,7]
এক [20,21]
মসৃণ পরীক্ষা ফাংশন জন্য কাজ:
যদিও এটি একটি সহজ কাজ, ইতিমধ্যে আউটপুটগুলির মধ্যে সূক্ষ্ম পার্থক্য রয়েছে। প্রথম নজরে তিনটি ফলাফলই যুক্তিসঙ্গত। অন্তর্নিহিত ফাংশন সম্পর্কে আমাদের পূর্ব জ্ঞানের উপর ভিত্তি করে দুটি বৈশিষ্ট্য লক্ষণীয় রয়েছে: মধ্যম ক্ষেত্রেটি griddata
ডেটাটিকে সবচেয়ে বেশি বিকৃত করে। y==-1
প্লটের সীমানা নোট করুন ( x
লেবেলের নিকটতম ): ফাংশনটি কঠোরভাবে শূন্য হওয়া উচিত (যেহেতু y==-1
মসৃণ ফাংশনের জন্য নোডাল লাইন), তবে এটি ক্ষেত্রে এটি নয় griddata
। x==-1
প্লটের সীমানাটিও লক্ষ্য করুন (পিছনে, বাম দিকে): অন্তর্নিহিত ফাংশনটিতে একটি স্থানীয় সর্বাধিক (সীমানার কাছে শূন্য গ্রেডিয়েন্ট বোঝানো হয়) রয়েছে [-1, -0.5]
, তবুও griddata
আউটপুটটি এই অঞ্চলে স্পষ্টতই শূন্য-বিন্দুতে দেখায়। প্রভাবটি সূক্ষ্ম, তবে এটি কোনও পক্ষপাতিত্ব কম নয়। (এর বিশ্বস্ততাRbf
ডাবডড রেডিয়াল ফাংশনগুলির ডিফল্ট পছন্দের সাথে আরও ভাল multiquadratic
)
অশুভ ফাংশন এবং upsampling
আমাদের দুষ্ট কাজটি সম্পর্কে নমুনা প্রদর্শন করা কিছুটা কঠিন কাজ:
তিনটি পদ্ধতির মধ্যে স্পষ্ট পার্থক্য দেখাতে শুরু করেছে। পৃষ্ঠের প্লটগুলির দিকে তাকালে, আউটপুট থেকে স্পষ্ট উদ্দীপনা অতিরিক্ত দেখা যাচ্ছে interp2d
(প্লট করা পৃষ্ঠের ডানদিকে দুটি হ্যাম্প নোট করুন)। যদিও griddata
এবং Rbf
এক নজরে অনুরূপ ফল বলে মনে হচ্ছে, পরেরটির একটি গভীর ন্যূনতম উত্পাদন করতে কাছাকাছি বলে মনে হয় [0.4, -0.4]
যে অন্তর্নিহিত ফাংশন থেকে অনুপস্থিত।
তবে এর মধ্যে একটি গুরুত্বপূর্ণ দিক রয়েছে যার Rbf
মধ্যে অনেক বেশি উন্নত: এটি অন্তর্নিহিত ফাংশনের প্রতিসাম্যকে সম্মান করে (এটি অবশ্যই নমুনা জালের প্রতিসারণ দ্বারা সম্ভব হয়েছিল)। থেকে প্রাপ্ত আউটপুট griddata
নমুনা পয়েন্টগুলির প্রতিসাম্যতা ভেঙে দেয়, যা ইতিমধ্যে মসৃণ ক্ষেত্রে দুর্বলভাবে দৃশ্যমান।
মসৃণ ফাংশন এবং বিক্ষিপ্ত ডেটা
প্রায়শই একজন ছড়িয়ে ছিটিয়ে থাকা ডেটাতে ইন্টারপোলেশন করতে চায়। এই কারণে আমি আশা করি এই পরীক্ষাগুলি আরও গুরুত্বপূর্ণ হবে। উপরে প্রদর্শিত হিসাবে, নমুনা পয়েন্টগুলি আগ্রহের ডোমেনে সিউডো-অভিন্নভাবে বেছে নেওয়া হয়েছিল। বাস্তব পরিস্থিতির মধ্যে আপনার প্রতিটি পরিমাপের সাথে অতিরিক্ত শব্দ হতে পারে এবং আপনার কাঁচা ডেটা শুরু হওয়ার সাথে সাথে এটি বিভক্ত করা কোনও অর্থবোধ করে কিনা তা আপনার বিবেচনা করা উচিত।
মসৃণ ফাংশনের জন্য আউটপুট:
ইতিমধ্যে সেখানে ইতিমধ্যে কিছুটা হরর শো চলছে। আমি প্লট করার জন্য একচেটিয়াভাবে interp2d
মধ্যে থেকে আউটপুটটি ক্লিপ করেছিলাম [-1, 1]
, যাতে কমপক্ষে ন্যূনতম পরিমাণে তথ্য সংরক্ষণ করা যায়। এটি পরিষ্কার যে অন্তর্নিহিত কিছু আকৃতি উপস্থিত থাকাকালীন এমন বিশাল শোরগোল অঞ্চল রয়েছে যেখানে পদ্ধতিটি সম্পূর্ণভাবে ভেঙে যায়। দ্বিতীয় griddata
কেসটি আকারটি মোটামুটি সুন্দরভাবে প্রজনন করে তবে কনট্যুর প্লটের সীমান্তে সাদা অঞ্চলগুলি লক্ষ্য করুন। এটি griddata
কেবলমাত্র ইনপুট ডেটার পয়েন্টগুলির উত্তল হলের অভ্যন্তরে কাজ করার কারণে ঘটে (অন্য কথায়, এটি কোনও এক্সট্রোপোলেশন সম্পাদন করে না )। উত্তল হলের বাইরে থাকা আউটপুট পয়েন্টগুলির জন্য আমি ডিফল্ট ন্যান মান রেখেছি। 2 এই বৈশিষ্ট্যগুলি বিবেচনা করে, Rbf
সেরা অভিনয় করা বলে মনে হচ্ছে।
দুষ্ট কাজ এবং বিক্ষিপ্ত ডেটা
এবং আমরা সকলেই যে মুহূর্তটির জন্য অপেক্ষা করছিলাম:
এটা কোন বিশাল বিস্ময় যে interp2d
মানেনা। প্রকৃতপক্ষে, কল করার সময় আপনার কাছে interp2d
আশা করা উচিত যে কিছু বন্ধুত্বপূর্ণ RuntimeWarning
স্প্লাইনটির নির্মাণের অসম্ভবতা সম্পর্কে অভিযোগ করবে s অন্য দুটি পদ্ধতির হিসাবে, Rbf
ফলাফলটি বহির্মুখী যেখানে ডোমেনের সীমানার কাছাকাছি এমনকি সেরা ফলাফল উত্পাদন করে বলে মনে হচ্ছে produce
তাই আমি পছন্দসই ক্রমহ্রাসমান ক্রমে তিনটি পদ্ধতি সম্পর্কে কয়েকটি শব্দ বলি (যাতে সবচেয়ে খারাপটি যে কারও দ্বারা পড়ার সম্ভাবনা কমপক্ষে থাকে)।
scipy.interpolate.Rbf
Rbf
শ্রেণী "রশ্মীয় ভিত্তিতে ফাংশন" জন্য দাঁড়িয়েছে। সত্যি কথা বলতে আমি এই পোস্টটির জন্য গবেষণা শুরু না করা পর্যন্ত আমি কখনও এই পদ্ধতির বিষয়টি বিবেচনা করি নি, তবে আমি নিশ্চিত যে ভবিষ্যতে আমি এগুলি ব্যবহার করব।
স্প্লাইন-ভিত্তিক পদ্ধতিগুলির মতো (পরে দেখুন), ব্যবহার দুটি ধাপে আসে: প্রথমে একটি Rbf
ইনপুট ডেটার উপর ভিত্তি করে কলযোগ্য শ্রেণীর উদাহরণ তৈরি করে এবং তারপরে আন্তঃবিবাহিত ফলাফল পাওয়ার জন্য প্রদত্ত আউটপুট জালির জন্য এই অবজেক্টটিকে কল করে। মসৃণ আপসাম্পলিং পরীক্ষার উদাহরণ:
import scipy.interpolate as interp
zfun_smooth_rbf = interp.Rbf(x_sparse, y_sparse, z_sparse_smooth, function='cubic', smooth=0) # default smooth=0 for interpolation
z_dense_smooth_rbf = zfun_smooth_rbf(x_dense, y_dense) # not really a function, but a callable class instance
নোট করুন যে ইনপুট এবং আউটপুট উভয় ক্ষেত্রেই এই ক্ষেত্রে 2 ডি অ্যারে ছিল এবং আউটপুটটি কোনও z_dense_smooth_rbf
আকৃতি ছাড়াই x_dense
এবং একই আকারে রয়েছে y_dense
। এছাড়াও লক্ষ করুন যে Rbf
প্রবিচ্ছেদের জন্য স্বেচ্ছাসেবী মাত্রা সমর্থন করে।
সুতরাং, scipy.interpolate.Rbf
- এমনকি ক্রেজি ইনপুট ডেটার জন্য ভাল আচরণযুক্ত আউটপুট উত্পাদন করে
- উচ্চ মাত্রায় বিরতি সমর্থন করে
- ইনপুট পয়েন্টগুলির উত্তল হাল এর বাইরে এক্সট্রাপোলেট
- প্রথম পদক্ষেপ হিসাবে একটি ইন্টারপোলটর তৈরি করে, তাই বিভিন্ন আউটপুট পয়েন্টগুলিতে এটি মূল্যায়ন কম অতিরিক্ত প্রচেষ্টা কম is
- স্বেচ্ছাসেবীর আকারের আউটপুট পয়েন্ট থাকতে পারে (আয়তক্ষেত্রাকার জাল বাঁধার বিপরীতে, পরে দেখুন)
- ইনপুট ডেটার প্রতিসাম্যতা সংরক্ষণ করার ঝুঁকিপূর্ণ
- শব্দ রশ্মীয় ফাংশন একাধিক ধরণের সমর্থন
function
: multiquadric
, inverse
, gaussian
, linear
, cubic
, quintic
, thin_plate
এবং ব্যবহারকারী-সংজ্ঞায়িত অবাধ
scipy.interpolate.griddata
আমার প্রাক্তন প্রিয়,, griddata
স্বেচ্ছাসেবী দিকগুলির মধ্যে বিভাজনের জন্য একটি সাধারণ ওয়ার্কসওয়ার্স। এটি নোডাল পয়েন্টগুলির উত্তল হাল এর বাইরে পয়েন্টগুলির জন্য একক প্রিসেট মান নির্ধারণের বাইরে এক্সট্রাপোলেশন সম্পাদন করে না, তবে যেহেতু এক্সট্রাপোলেশন একটি খুব চঞ্চল এবং বিপজ্জনক জিনিস, এটি অগত্যা কোনও শঙ্কা নয়। ব্যবহারের উদাহরণ:
z_dense_smooth_griddata = interp.griddata(np.array([x_sparse.ravel(),y_sparse.ravel()]).T,
z_sparse_smooth.ravel(),
(x_dense,y_dense), method='cubic') # default method is linear
সামান্য ক্লডজি সিনট্যাক্স নোট করুন। ইনপুট পয়েন্ট আকৃতি একটি অ্যারের নির্দিষ্ট করা আছে [N, D]
যে D
মাত্রা। এর জন্য আমাদের প্রথমে আমাদের 2 তম স্থানাঙ্ক অ্যারে (ব্যবহার করে ravel
) সমতল করতে হবে , তারপরে অ্যারেগুলি সংযুক্ত করে ফলাফলটি স্থানান্তর করতে হবে। এটি করার একাধিক উপায় রয়েছে তবে এগুলির সবগুলিই ভারী বলে মনে হচ্ছে। ইনপুট z
ডেটাও সমতল করতে হবে। আউটপুট পয়েন্টগুলির ক্ষেত্রে আমাদের আরও কিছুটা স্বাধীনতা আছে: কিছু কারণে এগুলি বহুমাত্রিক অ্যারেগুলির একটি টিপল হিসাবেও নির্দিষ্ট করা যেতে পারে। লক্ষ্য করুন help
এর griddata
, বিভ্রান্তিকর এটা প্রস্তাব দেওয়া যেমন যে একই জন্য সত্য ইনপুট পয়েন্ট (অন্তত সংস্করণ 0.17.0 জন্য):
griddata(points, values, xi, method='linear', fill_value=nan, rescale=False)
Interpolate unstructured D-dimensional data.
Parameters
----------
points : ndarray of floats, shape (n, D)
Data point coordinates. Can either be an array of
shape (n, D), or a tuple of `ndim` arrays.
values : ndarray of float or complex, shape (n,)
Data values.
xi : ndarray of float, shape (M, D)
Points at which to interpolate data.
সংক্ষেপে, scipy.interpolate.griddata
- এমনকি ক্রেজি ইনপুট ডেটার জন্য ভাল আচরণযুক্ত আউটপুট উত্পাদন করে
- উচ্চ মাত্রায় বিরতি সমর্থন করে
- এক্সট্রা পোলেশন সঞ্চালন করে না, ইনপুট পয়েন্টগুলির উত্তল হাল এর বাইরে আউটপুট জন্য একটি মান সেট করা যেতে পারে (দেখুন
fill_value
)
- একক কলে আন্তঃবিবাহিত মানগুলি গণনা করে, তাই একাধিক সেট আউটপুট পয়েন্টগুলি পরীক্ষা করা শুরু থেকে শুরু হয়
- যথেচ্ছ আকারের আউটপুট পয়েন্ট থাকতে পারে
- 1 ডি এবং 2 ডি-তে ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন, 1 ডি এবং 2 ডি-তে ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন, 1 ডি এবং 2 ডি-তে ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন ঘন 1 নিকটতম-প্রতিবেশী এবং লিনিয়ার ইন্টারপোলেশন ব্যবহার করুন
NearestNDInterpolator
এবং LinearNDInterpolator
যথাক্রমে হুডের নীচে। 1 ডি কিউবিক ইন্টারপোলেশন একটি স্প্লিন ব্যবহার করে, 2 ডি ঘন ইন্টারপোলেশন CloughTocher2DInterpolator
একটি অবিচ্ছিন্নভাবে পার্থক্যযোগ্য পিসওয়ালা-কিউবিক ইন্টারপোলটার তৈরি করতে ব্যবহার করে।
- ইনপুট ডেটার প্রতিসাম্যতা লঙ্ঘন করতে পারে
scipy.interpolate.interp2d
/scipy.interpolate.bisplrep
আমি আলোচনা করছি interp2d
এবং এর আত্মীয়দের একমাত্র কারণ হ'ল এর একটি প্রতারণামূলক নাম রয়েছে এবং লোকেরা এটি ব্যবহার করার চেষ্টা করতে পারে। স্পোলার সতর্কতা: এটি ব্যবহার করবেন না (স্কিপি সংস্করণ 0.17.0 হিসাবে)। এটি পূর্ববর্তী বিষয়গুলির তুলনায় এটি ইতিমধ্যে আরও বিশেষ যে এটি বিশেষত দ্বি-মাত্রিক অন্তরঙ্গকরণের জন্য ব্যবহৃত হয়েছিল, তবে আমার সন্দেহ হয় যে এটি মাল্টিভারিয়েট ইন্টারপোলেশনটির পক্ষে এখন পর্যন্ত সবচেয়ে সাধারণ ঘটনা।
সিনট্যাক্স যতদূর যায়, interp2d
তার Rbf
প্রথমটির মতো এটি প্রথমে একটি ইন্টারপোলেশন উদাহরণ নির্মাণ করা প্রয়োজন, যা প্রকৃত আন্তঃবিবাহিত মান সরবরাহ করতে বলা যেতে পারে। একটি ধরা আছে, তবে: আউটপুট পয়েন্টগুলি একটি আয়তক্ষেত্রাকার জালের উপর অবস্থিত থাকতে হবে, সুতরাং ইন্টারপোলটারে কলটিতে প্রবেশ করা ইনপুটগুলিকে 1 ডি ভেক্টর হতে হবে যা আউটপুট গ্রিডকে ছড়িয়ে দেয়, যেমন numpy.meshgrid
:
# reminder: x_sparse and y_sparse are of shape [6, 7] from numpy.meshgrid
zfun_smooth_interp2d = interp.interp2d(x_sparse, y_sparse, z_sparse_smooth, kind='cubic') # default kind is 'linear'
# reminder: x_dense and y_dense are of shape [20, 21] from numpy.meshgrid
xvec = x_dense[0,:] # 1d array of unique x values, 20 elements
yvec = y_dense[:,0] # 1d array of unique y values, 21 elements
z_dense_smooth_interp2d = zfun_smooth_interp2d(xvec,yvec) # output is [20, 21]-shaped array
ব্যবহার করার সময় সর্বাধিক সাধারণ ভুলগুলির মধ্যে একটি interp2d
হ'ল আপনার সম্পূর্ণ 2 ডি মেসকে আন্তঃবিশ্লেষণ কলটিতে স্থাপন করা, যা বিস্ফোরক মেমরি গ্রহণের দিকে পরিচালিত করে এবং আশা করি তাড়াহুড়ো করে MemoryError
।
এখন, সবচেয়ে বড় সমস্যাটি interp2d
হ'ল এটি প্রায়শই কাজ করে না। এটি বোঝার জন্য, আমাদের হুডের নীচে দেখতে হবে। এটা পরিনত হয় যে interp2d
নিম্ন-স্তরের কাজগুলির জন্য একটি লেফাফা হয় bisplrep
+ + bisplev
, যা FITPACK রুটিন জন্য পালা চাদরে (ফোরট্রান লেখা) রয়েছে। আগের উদাহরণটির সমতুল কল হবে
kind = 'cubic'
if kind=='linear':
kx=ky=1
elif kind=='cubic':
kx=ky=3
elif kind=='quintic':
kx=ky=5
# bisplrep constructs a spline representation, bisplev evaluates the spline at given points
bisp_smooth = interp.bisplrep(x_sparse.ravel(),y_sparse.ravel(),z_sparse_smooth.ravel(),kx=kx,ky=ky,s=0)
z_dense_smooth_bisplrep = interp.bisplev(xvec,yvec,bisp_smooth).T # note the transpose
এখন, এখানে জিনিস interp2d
(scipy সংস্করণ 0.17.0 মধ্যে) সেখানে একটা চমৎকার হল: মন্তব্যinterpolate/interpolate.py
জন্য interp2d
:
if not rectangular_grid:
# TODO: surfit is really not meant for interpolation!
self.tck = fitpack.bisplrep(x, y, z, kx=kx, ky=ky, s=0.0)
এবং প্রকৃতপক্ষে interpolate/fitpack.py
, bisplrep
কিছু সেটআপ আছে এবং শেষ পর্যন্ত
tx, ty, c, o = _fitpack._surfit(x, y, z, w, xb, xe, yb, ye, kx, ky,
task, s, eps, tx, ty, nxest, nyest,
wrk, lwrk1, lwrk2)
এবং এটাই. অন্তর্নিহিত রুটিনগুলি interp2d
প্রকৃতপক্ষে বিরক্তি সম্পাদন করে বোঝানো হয় না। তারা যথেষ্ট পরিমাণে আচরণের জন্য যথেষ্ট হতে পারে তবে বাস্তব পরিস্থিতিতে আপনি সম্ভবত অন্য কিছু ব্যবহার করতে চাইবেন।
শুধু উপসংহারে, interpolate.interp2d
- এমনকি ভাল-মেজাজযুক্ত ডেটা সহ শিল্পকর্মগুলিতে নেতৃত্ব দিতে পারে
- বিশেষত দ্বিখণ্ডিত সমস্যার জন্য (যদিও
interpn
গ্রিডে সংজ্ঞায়িত ইনপুট পয়েন্টের সীমাবদ্ধ রয়েছে )
- এক্সট্রাপোলেশন সম্পাদন করে
- প্রথম পদক্ষেপ হিসাবে একটি ইন্টারপোলটর তৈরি করে, তাই বিভিন্ন আউটপুট পয়েন্টগুলিতে এটি মূল্যায়ন কম অতিরিক্ত প্রচেষ্টা কম is
- কেবল একটি আয়তক্ষেত্রাকার গ্রিডের উপর আউটপুট উত্পাদন করতে পারে, বিক্ষিপ্ত আউটপুট জন্য আপনাকে একটি লুপে ইন্টারপোলটার কল করতে হবে
- লিনিয়ার, কিউবিক এবং কুইন্টিক ইন্টারপোলেশন সমর্থন করে
- ইনপুট ডেটার প্রতিসাম্যতা লঙ্ঘন করতে পারে
1 আমি মোটামুটি নিশ্চিত যে এর cubic
এবং linear
ভিত্তি ভিত্তিক কার্যাবলী Rbf
একই নামের অন্যান্য ইন্টারপোলটারগুলির সাথে হুবহু মিলে না।
2 এই এনএএনগুলি পৃষ্ঠতল প্লটটিকে কেন এত অদ্ভুত বলে মনে হচ্ছে তার কারণ: ম্যাটপ্লটলিব historতিহাসিকভাবে সঠিক 3 ডি অবজেক্টের যথাযথ গভীরতার তথ্য নিয়ে প্লট করতে সমস্যা হয়। উপাত্তগুলিতে NaN মানগুলি রেন্ডারকে বিভ্রান্ত করে, তাই পৃষ্ঠের অংশগুলি যা পিছনে থাকা উচিত তা সামনের দিকে ষড়যন্ত্র করা হয়। এটি ভিজ্যুয়ালাইজেশনের একটি সমস্যা, এবং অন্তরঙ্গকরণ নয়।