MXNet এর NDArray হল মূল ডাটা স্ট্রাকচার যা মাল্টি-ডাইমেনশনাল অ্যারে বা টেনসর ধারণ করে। এটি ডিপ লার্নিং মডেলগুলির জন্য ডাটা প্রক্রিয়া এবং গণনার জন্য ব্যবহার করা হয়। এখানে আমরা Indexing, Slicing, এবং Reshaping এর বিভিন্ন অপারেশন সম্পর্কে আলোচনা করব।
১. NDArray Indexing (ইন্ডেক্সিং)
Indexing অপারেশন দ্বারা আপনি NDArray-এর নির্দিষ্ট উপাদানগুলিতে এক্সেস করতে পারেন। এক বা একাধিক উপাদান বা ভ্যালু সরাসরি অ্যাক্সেস করতে পারা হয়।
1.1 1D NDArray Indexing
1D NDArray এর জন্য সাধারণ ইন্ডেক্সিং এর মাধ্যমে আপনি নির্দিষ্ট উপাদানে অ্যাক্সেস করতে পারেন।
import mxnet as mx
# 1D NDArray
arr = mx.nd.array([1, 2, 3, 4, 5])
print(arr[0]) # প্রথম উপাদান (0 ইনডেক্স) আউটপুট হবে: 1
print(arr[2]) # তৃতীয় উপাদান (2 ইনডেক্স) আউটপুট হবে: 3
1.2 2D NDArray Indexing
2D NDArray এর জন্য দুটি ইনডেক্স ব্যবহার করা হয় (row, column)।
# 2D NDArray
arr_2d = mx.nd.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr_2d[0, 0]) # প্রথম রো এবং প্রথম কলাম: আউটপুট হবে: 1
print(arr_2d[1, 2]) # দ্বিতীয় রো এবং তৃতীয় কলাম: আউটপুট হবে: 6
1.3 Negative Indexing
Negative indexing ব্যবহার করে আপনি অ্যারে/টেনসরের শেষের উপাদানগুলো অ্যাক্সেস করতে পারেন:
# 1D NDArray
print(arr[-1]) # শেষ উপাদান আউটপুট হবে: 5
print(arr[-3]) # তৃতীয় থেকে শেষ উপাদান আউটপুট হবে: 3
২. NDArray Slicing (স্লাইসিং)
Slicing অপারেশন দ্বারা আপনি NDArray থেকে একটি সাব-অ্যারে (sub-array) বা সাব-টেনসর বের করতে পারেন। এটি একটি start এবং end ইনডেক্সের মধ্যে নির্দিষ্ট অংশ নির্বাচন করতে ব্যবহৃত হয়।
2.1 1D NDArray Slicing
# 1D NDArray
arr = mx.nd.array([1, 2, 3, 4, 5])
print(arr[1:4]) # স্লাইস: 2 থেকে 4 পর্যন্ত আউটপুট হবে: [2, 3, 4]
2.2 2D NDArray Slicing
2D NDArray এর জন্য স্লাইসিং দুইটি ইনডেক্সের জন্য কাজ করে, প্রথমটি রো এবং দ্বিতীয়টি কলাম।
# 2D NDArray
arr_2d = mx.nd.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# রো 1 থেকে 2 পর্যন্ত এবং কলাম 1 থেকে 3 পর্যন্ত স্লাইসিং
print(arr_2d[1:3, 0:2]) # আউটপুট হবে: [[4, 5], [7, 8]]
2.3 Step Size ব্যবহার করে Slicing
Step size এর মাধ্যমে আপনি ইনডেক্সের মধ্যে step (ধাপ) ব্যবহার করতে পারেন:
# 1D NDArray
arr = mx.nd.array([1, 2, 3, 4, 5, 6])
print(arr[::2]) # প্রতি ২ ইনডেক্সে একে একে উপাদান আউটপুট হবে: [1, 3, 5]
৩. NDArray Reshaping (রিসেপিং)
Reshaping অপারেশন দ্বারা আপনি একটি NDArray এর আকার পরিবর্তন করতে পারেন। এটি একই ডাটা নিয়ে নতুন আকারের অ্যারে তৈরি করে।
3.1 1D থেকে 2D তে Reshaping
1D NDArray কে 2D বা অন্য কোনো আকারে পরিবর্তন করা যায়:
# 1D NDArray
arr = mx.nd.array([1, 2, 3, 4, 5, 6])
# 2D তে রিসেপিং: 2 রো এবং 3 কলাম
arr_reshaped = arr.reshape((2, 3))
print(arr_reshaped)
# আউটপুট:
# [[1. 2. 3.]
# [4. 5. 6.]]
3.2 2D থেকে 1D তে Reshaping
2D NDArray কে 1D তে রিসেপিং করা:
# 2D NDArray
arr_2d = mx.nd.array([[1, 2, 3], [4, 5, 6]])
# 1D তে রিসেপিং
arr_flat = arr_2d.reshape((-1,))
print(arr_flat) # আউটপুট হবে: [1. 2. 3. 4. 5. 6.]
3.3 নতুন আকারে রিসেপিং (dimension swap)
আপনি বিভিন্ন আকারে রিসেপিং করতে পারেন, যেমন একটি অ্যারের রো এবং কলাম উল্টে দেওয়া:
# 2D NDArray
arr_2d = mx.nd.array([[1, 2, 3], [4, 5, 6]])
# রো এবং কলামের আকার পরিবর্তন
arr_transposed = arr_2d.transpose()
print(arr_transposed)
# আউটপুট:
# [[1. 4.]
# [2. 5.]
# [3. 6.]]
3.4 একক আকারে রিসেপিং
আপনি NDArray এর আকারকে একক দৈর্ঘ্যে রিসেপিং করতে পারেন (যেমন এক সারির মধ্যে সব উপাদান রাখা):
# 2D NDArray
arr_2d = mx.nd.array([[1, 2], [3, 4]])
# 1D তে রিসেপিং
arr_flat = arr_2d.reshape(-1)
print(arr_flat) # আউটপুট হবে: [1 2 3 4]
সারাংশ
- Indexing: NDArray এর নির্দিষ্ট উপাদান বা সেলকে সিলেক্ট করতে ব্যবহার করা হয়। 1D, 2D, বা 3D অ্যারে গুলিতে সঠিক ইনডেক্স দিয়ে উপাদান অ্যাক্সেস করা যায়।
- Slicing: এটি NDArray এর একটি অংশ নির্বাচন করতে ব্যবহৃত হয়। আপনি একটি নির্দিষ্ট অংশ বা উপাদান সিলেক্ট করতে পারেন এবং এটি নতুন NDArray রিটার্ন করে।
- Reshaping: NDArray এর আকার পরিবর্তন করা হয় যাতে এটি নতুন আকারে ডাটা ধারণ করতে পারে, যেমন 1D থেকে 2D বা 2D থেকে 1D রূপান্তর করা।
এই অপারেশনগুলো MXNet NDArray এর সাথে কাজ করার জন্য অত্যন্ত গুরুত্বপূর্ণ এবং ডিপ লার্নিং মডেল ট্রেনিং, ডেটা প্রসেসিং এবং প্রিপ্রসেসিং প্রক্রিয়ায় খুবই কার্যকরী।
Read more