পাইথন নামপাই / NumPy

নামপাই কি?

পাইথনে নিউমেরিক্যাল ক্যালকুলেশনের  জন্য দারুণ একটি প্যাকেজ হচ্ছে NumPy। যার পূর্ণরুপ হচ্ছে Numarical Python।  নামপাইতে লিনিয়ার অ্যালজেব্রা, ফুরিয়ার ট্রান্সফরমেশন, মেট্রিক্স সহ অন্যান্য গাণিতিক ফাংশন গুলো রয়েছে। NumPy নিয়ে কাজ করাও দারুণ সহজ। বর্তমানে বেশির ভাগ মেশিন লার্নিং লাইব্রেরীতে নামপাই ব্যবহৃত হয়েছে।

পাইথনে বিল্টইন অ্যারে নেই। লিস্ট দিয়ে যদিও অ্যারের কাজ করা যায়, তবে অ্যারে থেকে স্লো। নামপাই ব্যবহার করে পাইথনে অ্যারে নিয়ে কাজ করা যায়। যা লিস্ট থেকে প্রায় ৫০ গুণ দ্রুত কাজ করে। নামপাই অ্যারে অবজেক্টকে বলে ndarray। ডেটা সাইন্স, মেশিন লার্নিং এর ক্ষেত্রে বেশির ভাগ সময় অ্যারে নিয়ে কাজ করতে হয়। আর যেখানে স্পিড একটা গুরুত্বপূর্ণ ফ্যাক্টর হিসেবে কাজ করে। নামপাই অ্যারে সি অ্যারের মত। যেখানে ডেটা গুলো কম্পিউটার মেমরিতে সিরিয়ালি রাখা হয়।  যার কারণে দ্রুততার সাথে ডেটা এক্সেস এবং কম্পিউট করা যায়। এমনকি নামপাই এর বেশির ভাগ অংশ সি প্রোগ্রামিং এ লেখা।

কি ভাবে কম্পিউটারে নামপাই ইন্সটল করব? 

পাইথনে নামপাই প্যাকেজ দেওয়া থাকে না। নামপাই ব্যবহার করতে হলে প্রথমে ইন্সটল করে নিতে হবে।  অনেক ভাবেই ইন্সটল করা যায়। সবচেয়ে সহজ উপায় হচ্ছে pip ব্যবহার করে ইন্সটলঃ


pip install numpy

NumPy ইন্সটল করার পরের কাজ হচ্ছে আমাদের প্রজেক্টে NumPy ইম্পোর্ট করা। তা সহজ। তার জন্য লিখতে হবেঃ

import numpy as np

এবার আমরা NumPy ব্যবহার করে ডেটা এনালাইসিস শুরু করতে পারি। যেমন কয়েকটি নাম্বারের mean, median and Standard Deviation বের করতে পারি নিচের মত করেঃ

 

import numpy

numbers = [1,2,3,4,5]
print (np.mean(numbers) )
print (np.median(numbers))
print (np.std(numbers))

যা আউটপুট দিবেঃ

3.0
3.0
1.4142135623730951

পাইথন লিস্ট থেকে নামপাই অ্যারেঃ

import numpy as np
numbers = [1,2,3,4,5]
# create numpy array using list
np_array = np.array(numbers)
print(np_array)
# print type of the array
print(type(np_array))

আউটপুট পাবোঃ

[1 2 3 4 5]
<class 'numpy.ndarray'>

এখানে যখন অ্যারের টাইপ দেখেছি, আউটপুট পেয়েছি ndarray, যা নামপাই অ্যারের ডেটা টাইপ।
নামপাই ব্যবহার করে র‍্যান্ডম নাম্বার তৈরি

অনেক সময় আমাদের কিছু ডামি ডেটা জেনারেট করতে হয়। নামপাই দিয়ে সহজেই করা যায়। যেমনঃ

import numpy as np
# creating an array of 10 zeros
zeros = np.zeros(10)
print("Zeros: ", zeros)

আউটপুটঃ

Zeros:  [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

1 দিয়ে পূর্ণ একটা অ্যারে তৈরিঃ

import numpy as np
ones = np.ones(10)
print(ones)

আউটপুটঃ

[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

নির্দিষ্ট রেঞ্জের অ্যারে তৈরিঃ

import numpy as np
# creating an array with 1-9 numbers
numbers = np.arange(10)
print("Numbers: ", numbers)

আউটপুটঃ

Numbers:  [0 1 2 3 4 5 6 7 8 9]

র‍্যান্ডম অ্যারে তৈরিঃ

import numpy as np
# generating random array
rand = np.random.rand(5)
print("Random array: ", rand)

আউটপুটঃ

Random array:  [0.48391274 0.8953468  0.71232276 0.957845   0.06149803]

শূন্য অ্যারে তৈরিঃ

import numpy as np
# creating empty array
empty = np.empty(10)

print("Empty array: ", empty)

আউটপুটঃ

Empty array:  [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

শূন্য অ্যারে পুরাপুরি শূন্য নয়। নামপাই কিছু নগণ্য ডেটা রেখে দেয়।

কাস্টম একটা অ্যারে তৈরিঃ

import numpy as np
# creating custom array
lst = np.arange(0, 100, 5)
print("Custom array: ", lst)

এর মানে 0-100 এর মধ্যে সংখ্যা গুলো ব্যবহার করে একটা অ্যারে তৈরি করতে। যেখানে প্রতি ধাপে ৫টা সংখ্যা বাদ দিয়ে পরের সংখ্যা নিতে। আউটপুট পাবো এমনঃ

Custom array:  [ 0  5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95]

একটা নির্দিষ্ট নাম্বার ব্যবহার করে অ্যারে ফিল করাঃ

import numpy as np
fours = np.full(10, 4)
print(fours)

এর মানে হচ্ছে ১০টা আইটেমের একটা অ্যারে নিতে যা 4 সংখ্যা দিয়ে পূরণ করবে। আউটপুট পাবোঃ

[4 4 4 4 4 4 4 4 4 4]

উপরে যে অ্যারে গুলো তৈরি করেছি, সেগুলো ছিল সিঙ্গেল ডাইমেনশন। আমরা চাইলে মাল্টি ডাইমেনশন অ্যারে তৈরি করতে পারিঃ
2D অ্যারে তৈরিঃ
যেমন 2D অ্যারে এভাবে তৈরি করতে পারিঃ


import numpy as np
two_d = np.array([[1, 2, 3, 4],
                  [5, 6, 7, 8]])

print(two_d)
print(type(two_d))

2D র‍্যান্ডম অ্যারে এভাবে তৈরি করতে পারিঃ

import numpy as np
two_d_random = np.random.rand(5, 5)
print(two_d_random)

যা আমাদের 5*5 একটা র‍্যান্ডম অ্যারে তৈরি করে দিবে। আর আউটপুট দিবে এমনঃ

[[0.76828436 0.03256732 0.50672433 0.71822415 0.28019605]
 [0.1980798  0.11341842 0.89289285 0.35829949 0.29935003]
 [0.05678151 0.50261822 0.12857632 0.94201653 0.07646785]
 [0.99381336 0.94689789 0.68164748 0.15754065 0.55676647]
 [0.47339245 0.20693384 0.01113813 0.27910212 0.96545314]]

একই ভাবে আমরা np.zeros(), np.ones(), np.arrange() ইত্যাদি ব্যবহার করতে পারি। যেমন:

import numpy as np

numpy_array = np.full((3, 3), 7)

print( numpy_array)

যা আউটপুট দিবেঃ

[[7 7 7]
 [7 7 7]
 [7 7 7]]

3D অ্যারে তৈরিঃ
3D অ্যারেকে ভাবতে পারেন একের অধিক 2D অ্যারের সমষ্টি। যেমনঃ

import numpy as np

three_d = np.array([[[1, 2, 3, 4],
                    [5, 6, 7, 8],
                    [9, 10, 11, 12]],

                   [[13, 14, 15, 16],
                    [17, 18, 19, 20],
                    [21, 22, 23, 24]]])

print(three_d)

এখানে দুইটা 3*4 অ্যারে রয়েছে। বুঝতে আরেকটু সহজ হবে যদি আমরা এই অ্যারেটি জেনারেট করিঃ

import numpy as np

three_d = np.zeros((2, 3, 4))

print(three_d)

আউটপুটঃ

প্রথম অ্যারেটাই আমরা 0 দিয়ে তৈরি করেছি। যদি (2, 3, 4) এর পরিবর্তে (4, 3, 4) লিখি, তাহলেঃ

import numpy as np

three_d = np.zeros((4, 3, 4))

print(three_d)

আউটপুট পাবোঃ

[[[0. 0. 0. 0.]
  [0. 0. 0. 0.]
  [0. 0. 0. 0.]]

 [[0. 0. 0. 0.]
  [0. 0. 0. 0.]
  [0. 0. 0. 0.]]

 [[0. 0. 0. 0.]
  [0. 0. 0. 0.]
  [0. 0. 0. 0.]]

 [[0. 0. 0. 0.]
  [0. 0. 0. 0.]
  [0. 0. 0. 0.]]]

মানে হচ্ছে 4টা 3*4 অ্যারে। যখন এমন মাল্টি ডাইমেনশন অ্যারে নিয়ে কাজ করব, তখন উল্টা থেকে পড়ব। যেমন (2, 3, 4) কে পড়ব প্রতিটা রোতে ৪টা আইটেম রয়েছে। চারটা আইটেম করে ৩টা কলাম রয়েছে প্রতি স্লাইচে। এবং স্লাইচ রয়েছে ২টা।

আমার মত রো এবং কলাম কোনটা, ভুলে গেলে আবার স্মরণ করে নিন। প্রথমে রো, পরে কলাম, পরে স্লাইস। তাহলে (4, 3, 4) এর ক্ষেত্রে হবে প্রতি রোতে ৪টা আইটেম করে মোট ৩টা রো রয়েছে, আর স্লাইস রয়েছে ৪টা! আবার অ্যারেতে কত গুলো আইটেম রয়েছে টোটাল তা এই (4, 3, 4) সংখ্যা গুলো গুণ করলেই পাওয়া যাবে। অর্থাৎ (4, 3, 4) সাইজের অ্যারেতে 48টা আইটেম থাকবে।

এবার একটা 3D অ্যারে র‍্যান্ডম নাম্বার দিয়ে তৈরি করিঃ

import numpy as np

three_d = np.random.rand(2, 4, 4)

print(three_d)

আউটপুট পাবো এমনঃ

[[[0.33232427 0.75586866 0.25462457 0.73435857]
  [0.93112968 0.22874133 0.05732807 0.20550526]
  [0.91491678 0.80284426 0.96504857 0.72724459]
  [0.07913152 0.82777457 0.73999394 0.89047055]]

 [[0.10752768 0.28268969 0.4941544  0.39691771]
  [0.06260027 0.33409239 0.45856429 0.53731255]
  [0.3712034  0.22679819 0.06241573 0.53909571]
  [0.51911    0.75112917 0.77076194 0.5575313 ]]]

একই অ্যারে যদি আমরা একটা নির্দিষ্ট সংখ্যা দিয়ে ফিল করতে চাই, তাহলে এভাবে লিখবঃ

import numpy as np
three_d = np.full((2, 4, 4), 6)
print(three_d)

উপরে একটা 2*4*4 অ্যারে তৈরি করবে যা ফিল করবে 6 দিয়ে।

উপরে যা শিখেছি, এগুলো সবই মেশিন লার্নিং বা ডেটা এনালাইসিস শিখতে গেলে কাজে লাগবে। B) শুভ কামনা। <3

1 thought on “পাইথন নামপাই / NumPy”

  1. numpy নিয়ে এত কম লেখা?দয়া করে আরেকটু বড় করে লেখবেন

    Reply

Leave a Reply