python পাইথন/নুমপি-র জালগ্রন্থের উদ্দেশ্য কী?




numpy multidimensional-array (4)

কেউ আমাকে meshgrid ফাংশনটির উদ্দেশ্য কী? আমি জানি এটি প্লট করার জন্য স্থানাঙ্কগুলির একরকম গ্রিড তৈরি করে, তবে আমি এর সরাসরি উপকারটি দেখতে পাচ্ছি না।

আমি সেবাস্তিয়ান রাশকা থেকে "পাইথন মেশিন লার্নিং" অধ্যয়ন করছি এবং তিনি সিদ্ধান্তের সীমানা ষড়যন্ত্র করার জন্য এটি ব্যবহার করছেন। 11 here ইনপুট দেখুন।

আমি অফিসিয়াল ডকুমেন্টেশন থেকেও এই কোডটি চেষ্টা করেছি, কিন্তু, আবারও আউটপুটটি আমার কাছে সত্যিকার অর্থে আসে না।

x = np.arange(-5, 5, 1)
y = np.arange(-5, 5, 1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
h = plt.contourf(x,y,z)

দয়া করে, যদি সম্ভব হয় তবে আমাকে অনেক বাস্তব-বিশ্বের উদাহরণও দেখান।

https://code.i-harness.com


জালগ্রিড দুটি অ্যারে থেকে সমস্ত জোড়া পয়েন্টের দুটি 1-ডি অ্যারে থেকে একটি আয়তক্ষেত্রাকার গ্রিড তৈরি করতে সহায়তা করে।

x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 1, 2, 3, 4])

এখন, আপনি যদি কোনও ফাংশন f (x, y) সংজ্ঞায়িত করেছেন এবং আপনি অ্যারে 'x' এবং 'y' এর পয়েন্টগুলির সমস্ত সম্ভাব্য সংমিশ্রণে এই ফাংশনটি প্রয়োগ করতে চান, তবে আপনি এটি করতে পারেন:

f(*np.meshgrid(x, y))

বলুন, যদি আপনার ফাংশনটি কেবল দুটি উপাদানের পণ্য তৈরি করে, তবে বৃহত অ্যারেগুলির জন্য দক্ষতার সাথে কোনও কার্তেসিয়ান পণ্য অর্জন করা যায়।

here থেকে রেফার করা


ধরুন আপনার কোনও ফাংশন রয়েছে:

def sinus2d(x, y):
    return np.sin(x) + np.sin(y)

এবং আপনি উদাহরণস্বরূপ, এটি 0 থেকে 2 * পিআই রেঞ্জের মধ্যে দেখতে কেমন তা দেখতে চান। তুমি এটা কি ভাবে করবে? সেখানে np.meshgrid আসে:

xx, yy = np.meshgrid(np.linspace(0,2*np.pi,100), np.linspace(0,2*np.pi,100))
z = sinus2d(xx, yy) # Create the image on this grid

এবং এই জাতীয় একটি চক্রান্ত দেখতে হবে:

import matplotlib.pyplot as plt
plt.imshow(z, origin='lower', interpolation='none')
plt.show()

সুতরাং np.meshgrid কেবল একটি সুবিধা। নীতিগতভাবে এটি দ্বারা করা যেতে পারে:

z2 = sinus2d(np.linspace(0,2*np.pi,100)[:,None], np.linspace(0,2*np.pi,100)[None,:])

তবে সেখানে আপনাকে আপনার মাত্রা (ধরুন আপনার কাছে দুটিরও বেশি ...) এবং সঠিক সম্প্রচার সম্পর্কে সচেতন হওয়া দরকার। np.meshgrid আপনার জন্য এই সমস্ত কিছু করে।

এছাড়াও মেশগ্রিড আপনাকে ডেটা সহ স্থানাঙ্কগুলি মুছে ফেলার অনুমতি দেয় যদি আপনি উদাহরণস্বরূপ কোনও প্রদাহ করতে চান তবে নির্দিষ্ট মানগুলি বাদ দেন:

condition = z>0.6
z_new = z[condition] # This will make your array 1D

তাহলে এখন আপনি কীভাবে এই ঘর্ষণ করবেন? আপনি scipy.interpolate.interp2d মতো একটি ইন্টারপোলেশন scipy.interpolate.interp2d x এবং y দিতে পারেন যাতে কোন স্থানাঙ্কগুলি মুছে ফেলা হয়েছিল তা জানতে আপনার একটি উপায় প্রয়োজন:

x_new = xx[condition]
y_new = yy[condition]

এবং তারপরে আপনি "ডান" স্থানাঙ্কগুলির সাথে বিভক্ত করতে পারেন (জালগ্রিড ছাড়াই এটি চেষ্টা করুন এবং আপনার কাছে অতিরিক্ত অতিরিক্ত কোড থাকবে):

from scipy.interpolate import interp2d
interpolated = interp2(x_new, y_new, z_new)

এবং আসল জালাগুলি আপনাকে আবার মূল গ্রিডে ইন্টারপোলেশন পেতে দেয়:

interpolated_grid = interpolated(xx, yy)

এটি কেবলমাত্র কয়েকটি উদাহরণ যেখানে আমি meshgrid ব্যবহার meshgrid সেখানে আরও অনেক কিছু থাকতে পারে।


মাইক্রোসফ্ট এক্সেলের সৌজন্যে:


meshgrid উদ্দেশ্য meshgrid এক্স মানগুলির একটি অ্যারে এবং y মানগুলির একটি অ্যারের বাইরে একটি আয়তক্ষেত্রাকার গ্রিড তৈরি করা।

সুতরাং, উদাহরণস্বরূপ, আমরা যদি গ্রিড তৈরি করতে চাই যেখানে আমাদের x এবং y উভয় দিকের মধ্যে 0 থেকে 4 এর মধ্যে প্রতিটি পূর্ণসংখ্যার মানতে একটি পয়েন্ট থাকে। একটি আয়তক্ষেত্রাকার গ্রিড তৈরি করতে আমাদের x এবং y পয়েন্টের প্রতিটি সমন্বয় প্রয়োজন।

এটি 25 পয়েন্ট হতে চলেছে, তাই না? সুতরাং আমরা যদি এই পয়েন্টগুলির জন্য একটি x এবং y অ্যারে তৈরি করতে চাই, আমরা নিম্নলিখিতটি করতে পারি।

x[0,0] = 0    y[0,0] = 0
x[0,1] = 1    y[0,1] = 0
x[0,2] = 2    y[0,2] = 0
x[0,3] = 3    y[0,3] = 0
x[0,4] = 4    y[0,4] = 0
x[1,0] = 0    y[1,0] = 1
x[1,1] = 1    y[1,1] = 1
...
x[4,3] = 3    y[4,3] = 4
x[4,4] = 4    y[4,4] = 4

এটি নিম্নলিখিত x এবং y ম্যাট্রিক্সের ফলস্বরূপ ঘটবে, যেমন প্রতিটি ম্যাট্রিক্সের সাথে সংশ্লিষ্ট উপাদানটির জোড় জোড় করে গ্রিডের একটি বিন্দুর x এবং y স্থানাঙ্ক দেয়।

x =   0 1 2 3 4        y =   0 0 0 0 0
      0 1 2 3 4              1 1 1 1 1
      0 1 2 3 4              2 2 2 2 2
      0 1 2 3 4              3 3 3 3 3
      0 1 2 3 4              4 4 4 4 4

এরপরে আমরা এগুলি গ্রিড কিনা তা যাচাই করার জন্য এগুলি প্লট করতে পারি:

plt.plot(x,y, marker='.', color='k', linestyle='none')

স্পষ্টতই, x এবং y এর বৃহত পরিসরের জন্য এটি খুব ক্লান্তিকর হয়ে y । পরিবর্তে, meshgrid আসলে এটি আমাদের জন্য উত্পন্ন করতে পারে: আমাদের নির্দিষ্ট করতে হবে আমাদের অনন্য x এবং y মান।

xvalues = np.array([0, 1, 2, 3, 4]);
yvalues = np.array([0, 1, 2, 3, 4]);

এখন, যখন আমরা meshgrid , আমরা স্বয়ংক্রিয়ভাবে পূর্ববর্তী আউটপুটটি পাই।

xx, yy = np.meshgrid(xvalues, yvalues)

plt.plot(xx, yy, marker='.', color='k', linestyle='none')

এই আয়তক্ষেত্রাকার গ্রিড তৈরি করা বিভিন্ন কাজের জন্য দরকারী। আপনি আপনার পোস্টে যে উদাহরণ সরবরাহ করেছেন, উদাহরণস্বরূপ এটি কেবলমাত্র একটি ক্রিয়া ( sin(x**2 + y**2) / (x**2 + y**2) ) এর বিভিন্ন ক্ষেত্রে নমুনা দেওয়ার একটি উপায় is x এবং y মান।

যেহেতু এই ফাংশনটি একটি আয়তক্ষেত্রাকার গ্রিডে নমুনা তৈরি করা হয়েছে, ফাংশনটি এখন "চিত্র" হিসাবে ভিজ্যুয়ালাইজ করা যায়।

অতিরিক্তভাবে, ফলাফলটি এখন এমন ফাংশনগুলিতে পাঠানো যেতে পারে যা আয়তক্ষেত্রাকার গ্রিডের (যেমন contourf ) ডেটা আশা করে





numpy-ndarray