কম্পিউটার টিউটোরিয়াল

NumPy-এ Flatten() এবং Ravel()-এর পার্থক্য


NumPy অ্যারে তৈরি করার অনেক পদ্ধতি রয়েছে। NumPy একটি ndarray-কে 1D অ্যারে-এ রূপান্তর করার জন্য দুটি ভিন্ন পদ্ধতি প্রদান করে: flatten() মেথড এবং ravel() মেথড।

উদাহরণ

# প্রয়োজনীয় লাইব্রেরি ইমপোর্ট করুন
import numpy as np

# একটি লিস্ট থেকে অ্যারে তৈরি করুন
arr = np.array([(2, 7, 3, 4), (5, 6, 9, 1)])

# flatten আউটপুট
print(arr.flatten())

# ravel আউটপুট
print(arr.ravel())

আউটপুট

[2 7 3 4 5 6 9 1] [2 7 3 4 5 6 9 1]

উপরে দেখা যাচ্ছে যে দুটি ফাংশনই একই ফলাফল ফেরত দেয়, তখন প্রশ্ন ওঠে: একই কাজের জন্য দুটি মেথড কেন?

নিচে flatten() এবং ravel() মেথডগুলির মূল পার্থক্যগুলো দেওয়া হলো:

arr.ravel()

  • মূল অ্যারের শুধুমাত্র রেফারেন্স ফেরত দেয়

  • উপরের অ্যারে (arr) মডিফাই করলে মূল অ্যারের মানও পরিবর্তিত হয়

  • ravel মেথড কোনো মেমরি অকুপাই করে না, তাই flatten()-এর চেয়ে দ্রুত

  • Ravel একটি লাইব্রেরি-লেভেল ফাংশন

arr.flatten()

  • অ্যারের একটি কপি ফেরত দেয়

  • উপরের অ্যারে (arr) মডিফাই করলে মূল অ্যারের মান পরিবর্তিত হয় না

  • flatten() মেমরি অকুপাই করে, তাই ravel()-এর চেয়ে কিছুটা ধীর

  • এটি একটি ndarray অবজেক্টের মেথড

বিশদ উদাহরণ

import numpy as np

# একটি NumPy অ্যারে তৈরি করুন
arr = np.array([(1,2,3,4), (3,1,4,2)])

# মূল অ্যারে প্রিন্ট করুন
print("মূল অ্যারে:\n", arr)

# অ্যারের ডাইমেনশন এবং টাইপ চেক করুন
print("মূল অ্যারের ডাইমেনশন: %d \n মূল অ্যারের টাইপ: %s" % (arr.ndim, type(arr)))

print("\nRavel মেথড থেকে আউটপুট:\n")

# ndarray কে 1D অ্যারে-এ রূপান্তর করুন
b_arr = arr.ravel()
# Ravel মূল অ্যারের একটি ভিউ পাস করে
print(b_arr)
b_arr[0] = 1000
print(b_arr)

# লক্ষ্য করুন: মূল অ্যারে 'arr'-র arr[0][0]-ও 1000 হয়ে গেছে
print(arr)

# ডাইমেনশন (১) এবং টাইপ চেক করুন
print("অ্যারের ডাইমেনশন: %d \n অ্যারের টাইপ: %s" % (b_arr.ndim, type(b_arr)))

print("\nFlatten মেথড থেকে আউটপুট:\n")

# ndarray কে 1D অ্যারে-এ রূপান্তর করুন
c_arr = arr.flatten()
# Flatten মূল অ্যারের একটি কপি পাস করে
print(c_arr)
c_arr[0] = 0
print(c_arr)

# লক্ষ্য করুন: c_arr-র মান পরিবর্তন করলে মূল অ্যারে 'arr'-এ কোনো প্রভাব পড়ে না
print(arr)
print("অ্যারের ডাইমেনশন->%d \n অ্যারের টাইপ->%s" % (c_arr.ndim, type(c_arr)))

আউটপুট

মূল অ্যারে: [[1 2 3 4] [3 1 4 2]]
মূল অ্যারের ডাইমেনশন: 2
মূল অ্যারের টাইপ: <class 'numpy.ndarray'>

Ravel মেথড থেকে আউটপুট:
[1 2 3 4 3 1 4 2]
[1000 2 3 4 3 1 4 2]
[[1000 2 3 4] [3 1 4 2]]
অ্যারের ডাইমেনশন: 1
অ্যারের টাইপ: <class 'numpy.ndarray'>

Flatten মেথড থেকে আউটপুট:
[1000 2 3 4 3 1 4 2]
[0 2 3 4 3 1 4 2]
[[1000 2 3 4] [3 1 4 2]]
অ্যারের ডাইমেনশন->1
অ্যারের টাইপ-><class 'numpy.ndarray'>

  1. উইন্ডোজ XP এবং উইন্ডোজ ৭-এর মধ্যে টপ ১০ পার্থক্য

  2. ক্রোমিয়াম এবং ক্রোমের মধ্যে ১২টি পার্থক্য

  3. Matplotlib ব্যাকএন্ড পার্থক্য: Agg এবং Cairo

  4. পাইথন ২.৭.x এবং পাইথন ৩.x-এর মধ্যে মূল পার্থক্য