multidimensional-array - Python / NumPy মধ্যে meshgrid এর উদ্দেশ্য কি?




numpy-ndarray (5)

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

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 থেকে উল্লিখিত

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

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

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

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)

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


ধরুন আপনার একটি ফাংশন আছে:

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 আপনার জন্য এই সব কাজ করে।

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

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

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

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

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

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

এবং মূল মেশগ্রিড আপনাকে মূল গ্রিডে আবার বিচ্ছিন্ন করার অনুমতি দেয়:

interpolated_grid = interpolated(xx, yy)

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


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


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

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

এই 25 পয়েন্ট হতে যাচ্ছে, অধিকার? তাই যদি আমরা এই সমস্ত পয়েন্টের জন্য একটি এক্স এবং 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 এর বৃহত রেঞ্জের জন্য খুব ক্লান্তিকর পায়। পরিবর্তে, meshgrid আসলে আমাদের জন্য এটি তৈরি করতে পারে: আমাদের প্রত্যেককে অনন্য x এবং y মান উল্লেখ করতে হবে।

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

এখন, যখন আমরা meshgrid কল 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) একটি পরিসরের নমুনা নমুনা করার একটি উপায়। x এবং y জন্য মান।

কারণ এই ফাংশনটি আয়তক্ষেত্রাকার গ্রিডে নমুনা করা হয়েছে, এখন ফাংশনটি "চিত্র" হিসাবে দৃশ্যমান করা যেতে পারে।

উপরন্তু, ফলাফলটি এখন ফাংশনগুলিতে প্রেরণ করা যেতে পারে যা আয়তক্ষেত্রাকার গ্রিডের তথ্য (অর্থাৎ contourf )


yieldঠিক মত return- এটি আপনি যা বলছেন তা ফেরত দেয় (একটি জেনারেটরের হিসাবে)। পার্থক্য হল যে পরবর্তী সময় আপনি জেনারেটরকে কল করুন, শেষ কল থেকে বিবাদ শুরু হয় yield। রিটার্নের বিপরীতে, যখন ফল উৎপন্ন হয় তখন স্ট্যাক ফ্রেমটি পরিষ্কার করা হয় না, তবে নিয়ন্ত্রণকারীকে আবার কলকারে স্থানান্তরিত করা হয়, ফলে পরবর্তী সময় ফাংশনটি পুনরায় চালু হবে।

আপনার কোডের ক্ষেত্রে, ফাংশনটি get_child_candidatesএকটি ইটারারেটরের মত কাজ করছে যাতে আপনি যখন আপনার তালিকা প্রসারিত করেন, তখন এটি নতুন তালিকায় একটি উপাদান যুক্ত করে।

list.extendএটি থুথু না হওয়া পর্যন্ত একটি পুনরাবৃত্তি কল। আপনি কোড কোড নমুনা ক্ষেত্রে পোস্ট, এটি একটি tuple ফিরে এবং তালিকায় যে যোগ করার জন্য অনেক পরিষ্কার হবে।





python numpy multidimensional-array mesh numpy-ndarray