পাইথন: NumPy সহ ভেক্টর, ম্যাট্রিক্স এবং অ্যারে

Python Vectors Matrices



এই পাঠে, আমরা পাইথনে NumPy লাইব্রেরি ব্যবহার করে ভেক্টর, ম্যাট্রিক্স এবং অ্যারেগুলির সাথে খেলার জন্য কিছু পরিষ্কার টিপস এবং কৌশলগুলি দেখব। যদি আপনি ডেটা সায়েন্সে শুরু করেন এবং এই উপাদানগুলির কিছু প্রাথমিক গাণিতিক ওভারভিউ প্রয়োজন এবং কোডে NumPy ব্যবহার করে আমরা তাদের সাথে কীভাবে খেলতে পারি তা এই পাঠটি একটি খুব ভাল সূচনা পয়েন্ট।

NumPy লাইব্রেরি আমাদের বিভিন্ন অপারেশন করতে দেয় যা মেশিন লার্নিং এবং ডেটা সায়েন্সে যেমন ভেক্টর, ম্যাট্রিক্স এবং অ্যারে ব্যবহার করা হয় এমন ডেটা স্ট্রাকচারগুলিতে করা প্রয়োজন। আমরা শুধুমাত্র NumPy এর সাথে সর্বাধিক সাধারণ ক্রিয়াকলাপ দেখাব যা অনেক মেশিন লার্নিং পাইপলাইনে ব্যবহৃত হয়। পরিশেষে, দয়া করে মনে রাখবেন যে NumPy অপারেশনগুলি সম্পাদন করার একটি উপায়, তাই, আমরা যে গাণিতিক ক্রিয়াকলাপগুলি দেখাই তা এই পাঠের মূল ফোকাস এবং নুমপি প্যাকেজ নিজেই নয়। চল শুরু করি.







ভেক্টর কী?

গুগলের মতে, একটি ভেক্টর হল একটি পরিমাণ যার দিক এবং দিক রয়েছে এবং বিশেষ করে মহাকাশে একটি পয়েন্টের অবস্থান নির্ধারণ করে।





মেশিন লার্নিং -এ ভেক্টর খুবই গুরুত্বপূর্ণ কারণ তারা শুধু মাত্রা বর্ণনা করে না বরং বৈশিষ্ট্যগুলির দিক নির্দেশ করে। আমরা নিম্নলিখিত কোড স্নিপেট দিয়ে NumPy তে একটি ভেক্টর তৈরি করতে পারি:





আমদানি অসম্পূর্ণহিসাবেযেমন

row_vector = np.array([,2,3])
ছাপা(সারি_ভেক্টর)

উপরের কোড স্নিপেটে, আমরা একটি সারি ভেক্টর তৈরি করেছি। আমরা একটি কলাম ভেক্টরও তৈরি করতে পারি:

আমদানি অসম্পূর্ণহিসাবেযেমন

col_vector = np.array([[],[2],[3]])
ছাপা(col_vector)

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

একটি ম্যাট্রিক্সকে কেবল দ্বিমাত্রিক অ্যারে হিসাবে বোঝা যায়। আমরা একটি বহু-মাত্রিক অ্যারে তৈরি করে NumPy দিয়ে একটি ম্যাট্রিক্স তৈরি করতে পারি:



ম্যাট্রিক্স = np.array([[,2,3],[4,5,6],[7,8,9]])
ছাপা(ম্যাট্রিক্স)

যদিও ম্যাট্রিক্স হুবহু বহুমাত্রিক অ্যারের অনুরূপ, ম্যাট্রিক্স ডেটা স্ট্রাকচার বাঞ্ছনীয় নয় দুটি কারণে:

  1. NumPy প্যাকেজের ক্ষেত্রে অ্যারে হল স্ট্যান্ডার্ড
  2. NumPy এর সাথে বেশিরভাগ অপারেশন অ্যারে প্রদান করে এবং ম্যাট্রিক্স নয়

একটি স্পার্স ম্যাট্রিক্স ব্যবহার করে

মনে করিয়ে দেওয়ার জন্য, একটি স্পার্স ম্যাট্রিক্স এমন একটি যেখানে বেশিরভাগ আইটেম শূন্য। এখন, ডেটা প্রক্রিয়াকরণ এবং মেশিন লার্নিংয়ের একটি সাধারণ দৃশ্য হল ম্যাট্রিক্স প্রক্রিয়াকরণ যেখানে বেশিরভাগ উপাদান শূন্য। উদাহরণস্বরূপ, একটি ম্যাট্রিক্স বিবেচনা করুন যার সারিগুলি ইউটিউবে প্রতিটি ভিডিও বর্ণনা করে এবং কলামগুলি প্রতিটি নিবন্ধিত ব্যবহারকারীর প্রতিনিধিত্ব করে। প্রতিটি মান প্রতিনিধিত্ব করে যে ব্যবহারকারী একটি ভিডিও দেখেছে কি না। অবশ্যই, এই ম্যাট্রিক্সের বেশিরভাগ মান শূন্য হবে। দ্য স্পার্স ম্যাট্রিক্স সহ সুবিধা এটি হল যে এটি শূন্য মান সংরক্ষণ করে না। এটি একটি বিশাল গণনীয় সুবিধা এবং স্টোরেজ অপ্টিমাইজেশনের পাশাপাশি।

আসুন এখানে একটি স্পার্ক ম্যাট্রিক্স তৈরি করি:

scipy আমদানি কম থেকে

original_matrix = np.array([[,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(মূল_ ম্যাট্রিক্স)
ছাপা(sparse_matrix)

কোড কিভাবে কাজ করে তা বুঝতে, আমরা এখানে আউটপুট দেখব:

উপরের কোডে, আমরা একটি তৈরি করতে একটি NumPy এর ফাংশন ব্যবহার করেছি সংকুচিত স্পার্স সারি ম্যাট্রিক্স যেখানে শূন্য-ভিত্তিক সূচী ব্যবহার করে অ-শূন্য উপাদানগুলি উপস্থাপন করা হয়। বিভিন্ন ধরণের স্পার্স ম্যাট্রিক্স রয়েছে, যেমন:

  • সংকুচিত স্পার্স কলাম
  • তালিকার তালিকা
  • চাবির অভিধান

আমরা এখানে অন্যান্য স্পার্স ম্যাট্রিক্সে ডাইভিং করবো না কিন্তু জানি যে তাদের প্রতিটি ব্যবহার নির্দিষ্ট এবং কাউকে 'সেরা' বলা যাবে না।

সমস্ত ভেক্টর উপাদানগুলিতে অপারেশন প্রয়োগ করা

এটি একটি সাধারণ দৃশ্যকল্প যখন আমাদের একাধিক ভেক্টর উপাদানগুলিতে একটি সাধারণ অপারেশন প্রয়োগ করতে হবে। এটি একটি ল্যাম্বদা সংজ্ঞায়িত করে এবং তারপর একই ভেক্টরাইজিং দ্বারা করা যেতে পারে। আসুন এর জন্য কিছু কোড স্নিপেট দেখি:

ম্যাট্রিক্স = np.array([
[,2,3],
[4,5,6],
[7,8,9]])

mul_5 = ল্যাম্বদা x: x* 5
vectorized_mul_5 = np.vectorize(mul_5)

ভেক্টরাইজড_মুল_5(ম্যাট্রিক্স)

কোড কিভাবে কাজ করে তা বুঝতে, আমরা এখানে আউটপুট দেখব:

উপরের কোড স্নিপেটে, আমরা ভেক্টরাইজ ফাংশন ব্যবহার করেছি যা NumPy লাইব্রেরির অংশ, একটি সাধারণ ল্যাম্বডা সংজ্ঞাকে একটি ফাংশনে রূপান্তর করতে যা ভেক্টরের প্রতিটি উপাদানকে প্রক্রিয়া করতে পারে। এটি লক্ষ্য করা গুরুত্বপূর্ণ যে ভেক্টরাইজ হল উপাদানগুলির উপর শুধু একটি লুপ এবং এটি প্রোগ্রামের কার্যকারিতার উপর কোন প্রভাব ফেলে না। NumPy অনুমতি দেয় সম্প্রচার , যার অর্থ উপরের জটিল কোডের পরিবর্তে, আমরা সহজভাবে করতে পারতাম:

ম্যাট্রিক্স* 5

এবং ফলাফল হুবহু একই হত। আমি প্রথমে জটিল অংশটি দেখাতে চেয়েছিলাম, অন্যথায় আপনি বিভাগটি এড়িয়ে যেতেন!

গড়, প্রকরণ এবং মান বিচ্যুতি

NumPy এর সাহায্যে ভেক্টরগুলিতে বর্ণনামূলক পরিসংখ্যান সম্পর্কিত অপারেশন করা সহজ। একটি ভেক্টরের গড় গণনা করা যেতে পারে:

np.mean(ম্যাট্রিক্স)

একটি ভেক্টরের বৈচিত্র্য গণনা করা যেতে পারে:

np.var(ম্যাট্রিক্স)

একটি ভেক্টরের মান বিচ্যুতি হিসাবে গণনা করা যেতে পারে:

যেমন std(ম্যাট্রিক্স)

প্রদত্ত ম্যাট্রিক্সে উপরের কমান্ডগুলির আউটপুট এখানে দেওয়া হয়েছে:

একটি ম্যাট্রিক্স স্থানান্তর

ট্রান্সপোজিং একটি খুব সাধারণ অপারেশন যা আপনি যখনই ম্যাট্রিক্স দ্বারা ঘিরে থাকবেন তখন আপনি শুনবেন। ট্রান্সপোজিং একটি ম্যাট্রিক্সের কলামার এবং সারির মানগুলি অদলবদলের একটি উপায়। দয়া করে মনে রাখবেন যে a ভেক্টর স্থানান্তরিত করা যাবে না একটি ভেক্টর হিসাবে কেবল মানগুলির একটি সংগ্রহ যা সেই মানগুলিকে সারি এবং কলামে শ্রেণীবদ্ধ করা হয় না। দয়া করে মনে রাখবেন যে একটি সারি ভেক্টরকে একটি কলাম ভেক্টরে রূপান্তর করা হচ্ছে না (রৈখিক বীজগণিতের সংজ্ঞার উপর ভিত্তি করে, যা এই পাঠের সুযোগের বাইরে)।

আপাতত, আমরা কেবল একটি ম্যাট্রিক্স স্থানান্তর করে শান্তি পাব। NumPy দিয়ে ম্যাট্রিক্সের স্থানান্তর অ্যাক্সেস করা খুব সহজ:

ম্যাট্রিক্স

প্রদত্ত ম্যাট্রিক্সে উপরের কমান্ডের আউটপুট এখানে দেওয়া হল:

একটি কলাম ভেক্টরে রূপান্তর করার জন্য একটি সারি ভেক্টরে একই অপারেশন করা যেতে পারে।

একটি ম্যাট্রিক্স সমতল করা

আমরা একটি ম্যাট্রিক্সকে এক-মাত্রিক অ্যারেতে রূপান্তর করতে পারি যদি আমরা এর উপাদানগুলিকে একটি রৈখিক পদ্ধতিতে প্রক্রিয়া করতে চাই। এটি নিম্নলিখিত কোড স্নিপেট দিয়ে করা যেতে পারে:

matrix.flatten()

প্রদত্ত ম্যাট্রিক্সে উপরের কমান্ডের আউটপুট এখানে দেওয়া হল:

লক্ষ্য করুন যে সমতল ম্যাট্রিক্স একটি এক-মাত্রিক অ্যারে, কেবল ফ্যাশনে রৈখিক।

Eigenvalues ​​এবং Eigenvectors গণনা করা হচ্ছে

Eigenvectors খুব সাধারণভাবে মেশিন লার্নিং প্যাকেজে ব্যবহৃত হয়। সুতরাং, যখন একটি রৈখিক রূপান্তর ফাংশন একটি ম্যাট্রিক্স হিসাবে উপস্থাপিত হয়, তখন X, Eigenvectors হল ভেক্টর যা কেবল ভেক্টরের স্কেলে পরিবর্তিত হয় কিন্তু এর দিকনির্দেশনা নয়। আমরা এটা বলতে পারি যে:

Xv = γv

এখানে, X হল বর্গাকার ম্যাট্রিক্স এবং γ এ Eigenvalues ​​রয়েছে। এছাড়াও, v এ Eigenvectors রয়েছে। NumPy এর সাহায্যে Eigenvalues ​​এবং Eigenvectors গণনা করা সহজ। এখানে কোড স্নিপেট যেখানে আমরা একই প্রদর্শন করি:

evalues, evectors = np.linalg.eig(ম্যাট্রিক্স)

প্রদত্ত ম্যাট্রিক্সে উপরের কমান্ডের আউটপুট এখানে দেওয়া হল:

ভেক্টরের ডট পণ্য

ভেক্টরের ডট প্রোডাক্ট 2 ভেক্টরকে গুণ করার একটি উপায়। এটি আপনাকে সম্পর্কে বলে ভেক্টরগুলি একই দিকে কতটা , ক্রস প্রোডাক্টের বিপরীতে যা আপনাকে উল্টো বলে, ভেক্টর একই দিকে কতটা কম (অরথোগোনাল বলা হয়)। আমরা এখানে কোড স্নিপেটে দেওয়া দুটি ভেক্টরের ডট পণ্য গণনা করতে পারি:

a = np.array([3,5,6])
b = np.array([2. 3,পনের,])

np.dot(a, খ)

প্রদত্ত অ্যারে উপরোক্ত কমান্ডের আউটপুট এখানে দেওয়া হল:

ম্যাট্রিক্স যোগ করা, বিয়োগ করা এবং গুণ করা

একাধিক ম্যাট্রিক্স যোগ করা এবং বিয়োগ করা ম্যাট্রিক্সে বেশ সহজবোধ্য কাজ। এটি করার দুটি উপায় আছে। এই ক্রিয়াকলাপগুলি সম্পাদনের জন্য কোড স্নিপেটটি দেখুন। এই সহজ রাখার উদ্দেশ্যে, আমরা একই ম্যাট্রিক্স দুইবার ব্যবহার করব:

np.add(ম্যাট্রিক্স, ম্যাট্রিক্স)

পরবর্তী, দুটি ম্যাট্রিক্স এইভাবে বিয়োগ করা যেতে পারে:

np.subtract(ম্যাট্রিক্স, ম্যাট্রিক্স)

প্রদত্ত ম্যাট্রিক্সে উপরের কমান্ডের আউটপুট এখানে দেওয়া হল:

প্রত্যাশিত হিসাবে, ম্যাট্রিক্সের প্রতিটি উপাদান সংশ্লিষ্ট উপাদানের সাথে যোগ/বিয়োগ করা হয়। ম্যাট্রিক্সকে গুণ করা ডট প্রোডাক্ট খোঁজার অনুরূপ যা আমরা আগে করেছি:

np.dot(ম্যাট্রিক্স, ম্যাট্রিক্স)

উপরের কোডটি দুটি ম্যাট্রিক্সের প্রকৃত গুণমান মান খুঁজে পাবে, যেমন দেওয়া হয়েছে:

ম্যাট্রিক্স*ম্যাট্রিক্স

প্রদত্ত ম্যাট্রিক্সে উপরের কমান্ডের আউটপুট এখানে দেওয়া হল:

উপসংহার

এই পাঠে, আমরা ভেক্টর, ম্যাট্রিক্স এবং অ্যারে সম্পর্কিত অনেক গাণিতিক ক্রিয়াকলাপের মধ্য দিয়ে গিয়েছিলাম যা সাধারণত ডেটা প্রসেসিং, বর্ণনামূলক পরিসংখ্যান এবং ডেটা সায়েন্স ব্যবহার করা হয়। এটি ছিল একটি দ্রুত পাঠ যা বিস্তৃত ধারণাগুলির মধ্যে কেবলমাত্র সর্বাধিক সাধারণ এবং সবচেয়ে গুরুত্বপূর্ণ বিভাগগুলিকে আচ্ছাদিত করে কিন্তু এই ক্রিয়াকলাপগুলি এই ডেটা স্ট্রাকচারগুলি নিয়ে কাজ করার সময় সমস্ত ক্রিয়াকলাপগুলি কী করা যেতে পারে সে সম্পর্কে খুব ভাল ধারণা দেওয়া উচিত।

অনুগ্রহ করে টুইটারে পাঠ সম্পর্কে আপনার মতামত অবাধে শেয়ার করুন @লিনাক্সহিন্ট এবং এসবিমাগারওয়াল (ওটা আমি!).