এবং প্রাথমিক প্রশ্নটি ছিল ... কীভাবে স্ক্যাটারের মানগুলি গ্রিডের মানগুলিতে রূপান্তর করা যায়, তাই না?
histogram2d
যাইহোক, প্রতি সেল প্রতি ফ্রিকোয়েন্সি গণনা করে তবে আপনার কাছে কেবলমাত্র ফ্রিকোয়েন্সি ব্যতীত অন্য সেল ডেটা থাকলে আপনার কিছু অতিরিক্ত কাজ করতে হবে।
x = data_x # between -10 and 4, log-gamma of an svc
y = data_y # between -4 and 11, log-C of an svc
z = data_z #between 0 and 0.78, f1-values from a difficult dataset
সুতরাং, আমার কাছে এক্স এবং ওয়াই স্থানাঙ্কের জেড-ফলাফল সহ একটি ডেটাসেট রয়েছে। যাইহোক, আমি আগ্রহের ক্ষেত্রের বাইরে কয়েকটি পয়েন্ট (বৃহত ফাঁক) এবং আগ্রহের একটি ছোট ক্ষেত্রে পয়েন্টের গাদা গণনা করছিলাম।
হ্যাঁ এখানে এটি আরও কঠিন হয়ে ওঠে তবে আরও মজাদার। কিছু গ্রন্থাগার (দুঃখিত):
from matplotlib import pyplot as plt
from matplotlib import cm
import numpy as np
from scipy.interpolate import griddata
পাইপ্লট আজ আমার গ্রাফিক ইঞ্জিন, সেন্টিমিটার কিছু ইনট্রেস্টিং পছন্দ সহ রঙিন মানচিত্রের একটি পরিসর। গণনার জন্য নির্লিপ্ত, এবং একটি নির্দিষ্ট গ্রিডে মান সংযুক্ত করার জন্য গ্রিডাটা।
শেষটি গুরুত্বপূর্ণ কারণ বিশেষ করে xy পয়েন্টগুলির ফ্রিকোয়েন্সি আমার ডেটাতে সমানভাবে বিতরণ করা হয়নি। প্রথমত, আমার ডেটা এবং একটি স্বেচ্ছাসেবী গ্রিডের আকারের সাথে মানানসই কিছু সীমারেখা দিয়ে শুরু করি। মূল ডেটাতে সেই এক্স এবং ওয়াইয়ের সীমানার বাইরেও ডেটাপয়েন্ট রয়েছে।
#determine grid boundaries
gridsize = 500
x_min = -8
x_max = 2.5
y_min = -2
y_max = 7
সুতরাং আমরা x এবং y এর সর্বনিম্ন এবং সর্বোচ্চ মানের মধ্যে 500 পিক্সেল সহ একটি গ্রিড সংজ্ঞায়িত করেছি।
আমার তথ্যগুলিতে, উচ্চ আগ্রহের ক্ষেত্রে উপলব্ধ 500 টিরও বেশি মূল্য রয়েছে; যদিও স্বল্প-স্বল্প-অঞ্চলে, মোট গ্রিডে 200 মানও নেই; এর গ্রাফিক সীমানার মধ্যে x_min
এবং x_max
এর চেয়েও কম রয়েছে।
সুতরাং একটি সুন্দর ছবি পাওয়ার জন্য, কাজটি হ'ল উচ্চ সুদের মানগুলির জন্য গড় পেতে এবং অন্য কোথাও শূন্যস্থান পূরণ করা।
আমি এখন আমার গ্রিড সংজ্ঞায়িত করছি। প্রতিটি এক্সএক্সওয়াই জুটির জন্য, আমি একটি রঙ চাই।
xx = np.linspace(x_min, x_max, gridsize) # array of x values
yy = np.linspace(y_min, y_max, gridsize) # array of y values
grid = np.array(np.meshgrid(xx, yy.T))
grid = grid.reshape(2, grid.shape[1]*grid.shape[2]).T
আজব আকৃতি কেন? scipy.griddata (n, D) এর আকার চায়।
গ্রিডটা পূর্বনির্ধারিত পদ্ধতিতে গ্রিডে প্রতি বিন্দুতে একটি মান গণনা করে। আমি "নিকটতম" বেছে নিই - খালি গ্রিড পয়েন্টগুলি নিকটবর্তী প্রতিবেশী থেকে মান পূরণ করা হবে। এটি দেখে মনে হচ্ছে যেন কম তথ্যযুক্ত অঞ্চলে বড় কক্ষ থাকে (এমনকি এটি না হলেও)। কেউ "রৈখিক" বিভক্ত করা বেছে নিতে পারে, তারপরে কম তথ্য সহ অঞ্চলগুলি কম তীক্ষ্ণ দেখায়। স্বাদের বিষয়, সত্যই।
points = np.array([x, y]).T # because griddata wants it that way
z_grid2 = griddata(points, z, grid, method='nearest')
# you get a 1D vector as result. Reshape to picture format!
z_grid2 = z_grid2.reshape(xx.shape[0], yy.shape[0])
এবং হ্যাপ, আমরা প্লটটি প্রদর্শনের জন্য ম্যাটপ্ল্লোলিবের কাছে হস্তান্তর করি
fig = plt.figure(1, figsize=(10, 10))
ax1 = fig.add_subplot(111)
ax1.imshow(z_grid2, extent=[x_min, x_max,y_min, y_max, ],
origin='lower', cmap=cm.magma)
ax1.set_title("SVC: empty spots filled by nearest neighbours")
ax1.set_xlabel('log gamma')
ax1.set_ylabel('log C')
plt.show()
ভি-শেপের মূল অংশের চারপাশে, আপনি দেখতে পাচ্ছেন যে মিষ্টি স্পটটি অনুসন্ধানের সময় আমি প্রচুর গণনা করেছি, অন্যদিকে প্রায় সব জায়গাতেই কম আকর্ষণীয় অংশগুলির রেজোলিউশন কম রয়েছে।